[PHP] tri sur group by

Résolu
Bonjour,
J'aimerais savoir s'il est possible "d'inverser" le grou by.
Je m'explique :
J'ai une table comme suis
id	titre	numero
4	titre 4	1
3	titre 3	1
2	titre 2	1
1	titre 1	1

si je fais un select avec group by numero, j'aurai uniquement la ligne ocrrespondant à id 1 avec titre 1.

Ce que j'aimerais c'est afficher titre 4 uniquement

ps : il y a bien sur d'autre donnée, d'autre numéro, le but ici serait d'afficher les x derniers ajout de la table en groupant les données par 'numero'

Merci pour vos aides :)

--
L'amour, c'est comme les spaghettis; quand c'est mou, c'est cuit. (proverbe belge)

11 réponses

  1. Si tu n'utilises pas la clause WHERE, il n'y a pas de réponse pour que MySQL ne retourne qu'une ligne ...
    Quelle est ta requête ?
    1. D'ou l'utilité du group by.
      $result_serie = mysql_query('SELECT e.id, e.titre FROM raynal_video_episode e WHERE type="1" ORDER BY e.id DESC '.$limit);

      voila ma requete complète (pas faire attention au where type="1"
      Donc dans mon exemple avec cette requete, je vais afficher
      titre 4
      titre 3
      titre 2
      titre 1

      Mais j'aimerais afficher uniquement
      titre 4

      et pas titre 1 (c'est le résultat si j'utilise "group by e.serie")
      1. Désolé, j'ai pris le "GROUP BY" pour un "ORDER BY".
        "GROUP BY" est à utiliser avec des fonctions SQL. Il permet par exemple de calculer la somme (fonction SUM()) d'un champ en groupant toutes les entrées ayant un champ commun.
        Tu as des exemples sur cette page :
        https://www.w3schools.com/sql/sql_groupby.asp

        Si tu veux uniquement la première entrée retournée par ta requête, alors n'utilise pas de boucle. À chaque fois que tu appelles la fonction mysql_fetch_assoc (ou _array, _object, ... | ou la méthode fetch() en PDO), ça appelle les lignes une par une.

        <?php
        $pdo = new PDO('mysql:host=localhost;dbnam=db_test','root','');
        
        $sql = 'SELECT e.id, e.titre FROM raynal_video_episode e WHERE type="1" ORDER BY e.id DESC '.$limit;
        $req = $pdo->query($sql);
        $ligne1 = $req->fetch();
        $req->closeCursor();
        
        echo $ligne1['titre'];
        ?>
        1. mais si je fait ça, j'aurai toutes les données même celle que je ne désire pas.

          Je ne vois pas ce qui change dans ton code.
          1. Ce qui change dans mon code c'est qu'il n'y a pas de boucle : on ne fait qu'un fetch, donc que la première ligne retournée par la requête. Et si $limit vaut quelque-chose comme "LIMIT 0,1", alors il n'y a qu'une ligne.
            1. ha ok, alors c'est mon exemple qui était mauvais, désolé.
              En voici un plus complet
              id	titre	numero
              7	titre 7	3
              6	titre 6	2
              5	titre 5	2
              4	titre 4	1
              3	titre 3	1
              2	titre 2	1
              1	titre 1	1

              voici ma table.
              Ce que je veux afficher c'est uniquement :
              titre 7
              titre 6
              titre 4
              1. Je n'ai pas d'idée pour la requête SQL.
                Mais avec un array, c'est faisable.
                <?php
                $pdo = new PDO('mysql:host=localhost;dbname=db_test','root','');
                
                $sql = 'SELECT * FROM table ORDER BY id';
                $req = $pdo->query($sql);
                $req->setFetchMode(PDO::FETCH_OBJ);
                $titres = array();
                
                while($titre = $req->fetch()) {
                    $titres[$titre->id] = $titre->titre;
                }
                $req->closeCursor();
                
                foreach($titres as $num => $titre) {
                    echo $num.' : '.$titre.'<br/>';
                }
                ?>
                Je n'ai pas testé mais ça devrait être ça.
                $titres[2] contiendra donc "titre 6".
                1. Merci mais dans ce cas ci, je vais de nouveau affiché
                  titre 7
                  titre 6
                  titre 5
                  titre 4
                  titre 3
                  titre 2
                  titre 1

                  au lieu de uniquement
                  titre 7
                  titre 6
                  titre 4


                  Je me trompe? (j'ai pas encore l'habitude d'utiliser pdo :p)
                  1. Oui, désolé.
                    Remplace
                    $titres[$titre->id] = $titre->titre;
                    Par
                    $titres[$titre->numero] = $titre->titre;
                    1. Ok, en adaptant un peu le code, j'ai trouvé ce qu'il me fallait.
                      merci beaucoup.