[PHP] tri sur group by
Résolu/Fermé
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
-
6 mai 2010 à 17:38
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 - 9 mai 2010 à 20:52
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 - 9 mai 2010 à 20:52
A voir également:
- [PHP] tri sur group by
- Comment créer un groupe sur whatsapp - Guide
- Trier sur excel - Guide
- Easy php - Télécharger - Divers Web & Internet
- Logiciel tri photo gratuit - Guide
- Gd group prélèvement - Forum Vos droits sur internet
11 réponses
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
6 mai 2010 à 18:50
6 mai 2010 à 18:50
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 ?
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
6 mai 2010 à 19:17
6 mai 2010 à 19:17
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")
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
6 mai 2010 à 19:50
6 mai 2010 à 19:50
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']; ?>
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
6 mai 2010 à 19:57
6 mai 2010 à 19:57
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
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
6 mai 2010 à 20:01
6 mai 2010 à 20:01
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.
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
6 mai 2010 à 20:45
6 mai 2010 à 20:45
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
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
7 mai 2010 à 22:35
7 mai 2010 à 22:35
Alors avion-f16, tu n'as pas une idée?
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
7 mai 2010 à 22:40
7 mai 2010 à 22:40
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".
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
7 mai 2010 à 22:48
7 mai 2010 à 22:48
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)
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
7 mai 2010 à 23:39
7 mai 2010 à 23:39
Oui, désolé.
Remplace
Remplace
$titres[$titre->id] = $titre->titre;Par
$titres[$titre->numero] = $titre->titre;
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
9 mai 2010 à 20:52
9 mai 2010 à 20:52
Ok, en adaptant un peu le code, j'ai trouvé ce qu'il me fallait.
merci beaucoup.
merci beaucoup.