Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer le champs 'vu' du plus gros id du membre

Dans une sous requete

Anonyme
    17 janvier 2019 à 10:24:40

    Bonjour à tous,
    J'ai une table client_note qui permet à mes clients d'entrer des notes quotidiennes.
    La structure de la table est la suivante :
    id - id_client - date - note - vu

    Voici un export de ma table :

    -- phpMyAdmin SQL Dump
    -- version 4.7.9
    -- https://www.phpmyadmin.net/
    --
    -- Hôte : 127.0.0.1:3306
    -- Généré le :  jeu. 17 jan. 2019 à 09:14
    -- Version du serveur :  5.7.21
    -- Version de PHP :  7.2.4
    
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
    SET time_zone = "+00:00";
    
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8mb4 */;
    
    --
    -- Base de données :  `np`
    --
    
    -- --------------------------------------------------------
    
    --
    -- Structure de la table `client_note`
    --
    
    DROP TABLE IF EXISTS `client_note`;
    CREATE TABLE IF NOT EXISTS `client_note` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `id_client` int(11) NOT NULL,
      `date` datetime NOT NULL,
      `note` text NOT NULL,
      `vu` varchar(1) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=latin1;
    
    --
    -- Déchargement des données de la table `client_note`
    --
    
    INSERT INTO `client_note` (`id`, `id_client`, `date`, `note`, `vu`) VALUES
    (8, 11, '2019-01-09 00:00:00', 'tefsdfsdfscsd', '0'),
    (9, 11, '2019-01-10 00:00:00', 'dfskfdsdfsd fdskf fdsg sdkv, skflzfczp f,lvn fd,c;s,c vm,v z 5efv sdfvdvdknb efv6sv \'_eorfikzeordlg,v s5dv \'éze rfzoldvk ,df,vbnsdc5 zvedgv zrjdfvz 6fvrjvrfvs nv r, vrz,dv rgnver fev erv ekrfgvn \'çgjv rejtnv z\r\nf\r\n ez\r\nv\r\ne \r\ndsg\r\nv erfdv erfdg, efdcnv ers\r\n\r\nef\r\n verfdcn vefkdgvekrfd,vb erfg6v erf,v efdg*erfdcg5db erfd6gerf9d6gb5 rfdcv, erfdkgv e d9ed6v ed6vdc, erdfg bn erjdfbgvere7erfged9gbdf4b dc', '0'),
    (10, 11, '2019-01-14 00:00:00', 'gvhk,tfglkh,g,ntlgvk nfknb fkc fgd\r\ng\r\nrdfg\r\nfgn\r\ncfgng\r\nnyvhkgujhù:;gubh9hj,tf9gh4ftgh\r\ncfcfhftg\r\nhgv6jg9j5,gy99gjvgb,', '1'),
    (12, 2, '2019-01-16 00:00:00', 'test', '0'),
    (13, 2, '2019-01-17 00:00:00', 'test', '1');
    COMMIT;
    
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    

    En gros, j'aimerais récupérer le 'vu' du plus gros id de chaque client. Mais dans tous les cas, tous les essais que j'ai fait, ça récupère le plus petit id, soit le 8 et le 12, et donc le vu qui sont associés à ces entrées. Mon but étant de chopper le 10 et le 13 :)

    SELECT client.statut AS client_statut, client_note.vu, client_note.id AS note_id FROM client
    	LEFT JOIN (SELECT id, id_client, vu FROM client_note GROUP BY id_client ORDER BY id) AS client_note ON client_note.id_client=client.id_client
    	WHERE client.id_membre=".$_SESSION['session_id']."
    	GROUP BY client.id_client
    	ORDER BY nom


    Je ne comprend pas comment récupérer le plus gros id :x

    EDIT : Quand j'enlève le group by, j'arrive à les afficher dans le bon ordre mais j'ai des doublons, normal. Alors je remet le group by et je n'ai plus le max de l'id note.
    J'ai donc essayé avec un limit 1 dans ma clause de sous requête, mais dans ce cas ça ne me sort qu'une fois l'id_note max :x

    Merci par avance !

    EDIT : J'ai galéré mais j'ai trouvé, il m'aura fallu faire une sous-requête dans ma sous requête x)
    Plutot qu'un order by DESC LIMIT 1 qui ne me sort que pour un client, j'ai fait une sous requête avec un where id=(SELECT MAX(id) FROM client_note AS cn2 WHERE cn2.id_client=cn.id_client)

    Je suis plutôt content de moi haha, je commence à piger les sous-requêtes :p
    Merci pour votre silence haha ^_^

    -
    Edité par Anonyme 17 janvier 2019 à 15:10:41

    • Partager sur Facebook
    • Partager sur Twitter
      17 janvier 2019 à 15:10:13

      ORDER BY => ORDER BY DESC
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        17 janvier 2019 à 15:15:09

        Haha je viens d'éditer :p
        J'ai tout essayé, en réalité ma requête est bien plus grosse que ça, mais un order by desc dans la sous requête ne fonctionnait pas non plus sans mettre un group by sur note_id. Ce qui générait des doublons. Du coup une sous requête dans ma sous requête ça l'a fait x)

        SELECT client_note.vu, client.nom, client_note.id AS note_id FROM client
        LEFT JOIN (SELECT cn.id, cn.id_client, cn.vu FROM client_note AS cn WHERE id=(SELECT MAX(id) FROM client_note AS cn2 WHERE cn2.id_client=cn.id_client) ORDER BY cn.id) AS client_note ON client.id_client=client_note.id_client
        WHERE client.id_membre=".$_SESSION['session_id']."
        GROUP by client.id_client
        ORDER BY nom

        -
        Edité par Anonyme 17 janvier 2019 à 15:15:23

        • Partager sur Facebook
        • Partager sur Twitter
          17 janvier 2019 à 15:16:14

          J'avoue que je n'avais pas lu ta requête en détails, mais vu que je ne voyais pas de DESC, je me disais que ca ne pouvait pas marcher ^^
          • Partager sur Facebook
          • Partager sur Twitter
            17 janvier 2019 à 18:19:21

            harvox a écrit:

            une sous requête dans ma sous requête ça l'a fait x)

            Mouai ... c'est plus joli avec une jointure non ?

            SELECT
            	C.statut,
            	CN.vu,
            	CN.id
            FROM
            	client C
            		LEFT JOIN (
            				-- Dernier id note par client
            				SELECT id_client, MAX( id ) AS max_vu
            				FROM client_note
            				GROUP BY id_client
            			) M
            			ON C.id_client = M.id_client
            		LEFT JOIN client_note CN
            			ON M.max_vu = CN.id
            WHERE C.id_membre = '...'
            • Partager sur Facebook
            • Partager sur Twitter
            Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

            Récupérer le champs 'vu' du plus gros id du membre

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown