[PHP] tri sur group by
Résolu
okuni
Messages postés
1221
Date d'inscription
Statut
Membre
Dernière intervention
-
okuni Messages postés 1221 Date d'inscription Statut Membre Dernière intervention -
okuni Messages postés 1221 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'aimerais savoir s'il est possible "d'inverser" le grou by.
Je m'explique :
J'ai une table comme suis
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 :)
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 :)
A voir également:
- [PHP] tri sur group by
- Comment faire un tri personnalisé sur excel - Guide
- Comment créer un groupe sur whatsapp - Guide
- Logiciel tri photo - Guide
- Easy php - Télécharger - Divers Web & Internet
- La shoes by avis - Forum Consommation & Internet
11 réponses
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 ?
Quelle est ta requête ?
D'ou l'utilité du group by.
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")
$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")
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.
"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']; ?>
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.
Je ne vois pas ce qui change dans ton code.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
ha ok, alors c'est mon exemple qui était mauvais, désolé.
En voici un plus complet
voici ma table.
Ce que je veux afficher c'est uniquement :
titre 7
titre 6
titre 4
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
Je n'ai pas d'idée pour la requête SQL.
Mais avec un array, c'est faisable.
$titres[2] contiendra donc "titre 6".
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".
Merci mais dans ce cas ci, je vais de nouveau affiché
au lieu de uniquement
Je me trompe? (j'ai pas encore l'habitude d'utiliser pdo :p)
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)