Fonction GROUP BY
Résolu/Fermé
Delphine97224
Messages postés
99
Date d'inscription
lundi 6 juillet 2009
Statut
Membre
Dernière intervention
8 septembre 2011
-
27 sept. 2009 à 09:58
Delphine97224 Messages postés 99 Date d'inscription lundi 6 juillet 2009 Statut Membre Dernière intervention 8 septembre 2011 - 8 oct. 2009 à 22:45
Delphine97224 Messages postés 99 Date d'inscription lundi 6 juillet 2009 Statut Membre Dernière intervention 8 septembre 2011 - 8 oct. 2009 à 22:45
A voir également:
- Ora-00979
- Fonction si et - Guide
- Home by me - Télécharger - 3D
- Fonction moyenne excel - Guide
- Fonction somme excel - Guide
- Zen by deezer - Télécharger - Santé & Bien-être
6 réponses
Delphine 97224 (quel nom poétique !)
Ta requête initiale est presque ok, mais tu es parti sur la piste group by qui n'est pas adaptée dans ce cas :
Ce que tu veux, c'est afficher TOUS les enregistrements, en faisant des ruptures à l'affichage.
La clause (et pas la fonction) GROUP BY ne donne pas le détail des éléments, elle les regroupe, ce n'est donc pas la bonne piste dans ton cas.
Ma proposition :
Le SQL va ramener tous les éléments concernés ordonnés par sous menu :
Fait une requête SQL simple, avec juste un order by des éléments sur lesquel il doit y avoir rupture
exemple :
C'est le PHP va se charger de faire les ruptures comme ci-dessous :
En espérant que cela te serves, et fais attention au mélange html/PHP : si tu ne veux pas être perdue, fais comme j'ai fait dans l 'exemple : Dans un cas comme celui-ci, il vaut mieux : tout en php.
Une remarque aussi, évite de multiplierles mélanges de simple qotes et doubles quotes !
En cadeaux, un exemple de code html généré :
Ta requête initiale est presque ok, mais tu es parti sur la piste group by qui n'est pas adaptée dans ce cas :
Ce que tu veux, c'est afficher TOUS les enregistrements, en faisant des ruptures à l'affichage.
La clause (et pas la fonction) GROUP BY ne donne pas le détail des éléments, elle les regroupe, ce n'est donc pas la bonne piste dans ton cas.
Ma proposition :
Le SQL va ramener tous les éléments concernés ordonnés par sous menu :
Fait une requête SQL simple, avec juste un order by des éléments sur lesquel il doit y avoir rupture
exemple :
SELECT menu, sous_menu, description, prix, etc... FROM fiches_categorie ORDER BY sous_menu WHERE menu like 'Alimentaire'
C'est le PHP va se charger de faire les ruptures comme ci-dessous :
<?php $style = 1; $reponse = mysql_query("SELECT * FROM fiches_categorie WHERE menu like 'Alimentaire' ORDER BY sous_menu"); $dernierSousMenu = ""; // initialise la valeur pour les ruptures $sousmenucourant = ""; while ($donnees = mysql_fetch_array($reponse)) { $sousmenucourant = $donnees['sous_menu']; if ($sousmenucourant != $dernierSousMenu) { //echo '<div class=\"groupe" .($style%3) ."\">'; commente par manque du code css necessaire $style++; echo "<h2>" . $sousmenucourant . "</h2>\n"; // note le backslash n est juste mis pour un code généré plus joli (idem ci-dessous) $dernierSousMenu = $sousmenucourant; } echo "<h3><a href=\"fiche-par-type.php?id_fiche=" .$donnees['id'] . "\">" . $donnees['produit'] . "</a>"; echo "</h3>\n"; } ?>
En espérant que cela te serves, et fais attention au mélange html/PHP : si tu ne veux pas être perdue, fais comme j'ai fait dans l 'exemple : Dans un cas comme celui-ci, il vaut mieux : tout en php.
Une remarque aussi, évite de multiplierles mélanges de simple qotes et doubles quotes !
En cadeaux, un exemple de code html généré :
<h2>Boissons</h2> <h3><a href="fiche-par-type.php?id_fiche=1">coca</a></h3> <h3><a href="fiche-par-type.php?id_fiche=2">limonade</a></h3> <h3><a href="fiche-par-type.php?id_fiche=3">bière</a></h3> <h2>Entrées</h2> <h3><a href="fiche-par-type.php?id_fiche=4">salade</a></h3> <h3><a href="fiche-par-type.php?id_fiche=5">feuilleté</a></h3> <h3><a href="fiche-par-type.php?id_fiche=6">oeuf mayonnaise</a></h3> <h3><a href="fiche-par-type.php?id_fiche=7">terrine maison</a></h3>
moderno31
Messages postés
870
Date d'inscription
mardi 23 juin 2009
Statut
Membre
Dernière intervention
8 août 2012
92
27 sept. 2009 à 17:48
27 sept. 2009 à 17:48
Bonjour
Ta requête n'as pas de sens !
Group by s'emploi pour aggréger, regrouper des champs lors d'un COUNT, SUM, AVG...
CE qui a du sens
SELECT count(*) as nb FROM fiches_categorie WHERE menu='Alimentaire' GROUP BY sous_menu ORDER BY sous_menu;
Peux-tu maintenant précicer le contexte de tes données. Parce qu'on ne peux pas deviner pour t'aider au mieux.
Ta requête n'as pas de sens !
Group by s'emploi pour aggréger, regrouper des champs lors d'un COUNT, SUM, AVG...
CE qui a du sens
SELECT count(*) as nb FROM fiches_categorie WHERE menu='Alimentaire' GROUP BY sous_menu ORDER BY sous_menu;
Peux-tu maintenant précicer le contexte de tes données. Parce qu'on ne peux pas deviner pour t'aider au mieux.
Delphine97224
Messages postés
99
Date d'inscription
lundi 6 juillet 2009
Statut
Membre
Dernière intervention
8 septembre 2011
9
27 sept. 2009 à 21:39
27 sept. 2009 à 21:39
Salut,
Je sais que GROUP BY s'utilise souvent quand on utilise COUNT mais moi ce que je veux c'est dans une div en H2 donc comme un titre je rentre le sous-menu et ensuite en H3 je liste les produits qui sont en rapport avec le sous-menu. Dans ma base de données chaque article a un menu et un sous-menu. Prenons par exemple boissons (sous-menu) et toutes les autres boissons (produits) ce que je souhaiterais qui s'affiche c'est en H2 boissons et toutes les boissons en dessous. Pour le HTML y'a pas de soucis je connais c'est juste comment aller chercher dans ma base de données le titre de chaque sous-menu et en dessous afficher tous les produits sachant que j'ai énormément de sous-menus et que je ne pourrais pas tout le temps écrire des WHERE. Je veux juste afficher. Compter je m'en fous un peu, c'est pas trop essentiel.
Je te remercie pour ton aide.
Je sais que GROUP BY s'utilise souvent quand on utilise COUNT mais moi ce que je veux c'est dans une div en H2 donc comme un titre je rentre le sous-menu et ensuite en H3 je liste les produits qui sont en rapport avec le sous-menu. Dans ma base de données chaque article a un menu et un sous-menu. Prenons par exemple boissons (sous-menu) et toutes les autres boissons (produits) ce que je souhaiterais qui s'affiche c'est en H2 boissons et toutes les boissons en dessous. Pour le HTML y'a pas de soucis je connais c'est juste comment aller chercher dans ma base de données le titre de chaque sous-menu et en dessous afficher tous les produits sachant que j'ai énormément de sous-menus et que je ne pourrais pas tout le temps écrire des WHERE. Je veux juste afficher. Compter je m'en fous un peu, c'est pas trop essentiel.
Je te remercie pour ton aide.
sonia37
Messages postés
39
Date d'inscription
jeudi 12 avril 2007
Statut
Membre
Dernière intervention
29 décembre 2010
2
28 sept. 2009 à 06:12
28 sept. 2009 à 06:12
Je crois que c'est ce que tu veux mais je ne suis pas sûre d'avoir compris.
<?php
$html =""; //ou n'importe quel nom de variable
while($donnees = mysql_fetch_array($reponse))//une boucle while pour avoir tous les sous-produits
$html .='<h3><a href="fiche-par-type.php?id_fiche=' .$donnees['id'] . '">' . $donnees['produit'] . '</a></h3>';
echo($html);//Affichage de ce que contient la variable
?>
<?php
$html =""; //ou n'importe quel nom de variable
while($donnees = mysql_fetch_array($reponse))//une boucle while pour avoir tous les sous-produits
$html .='<h3><a href="fiche-par-type.php?id_fiche=' .$donnees['id'] . '">' . $donnees['produit'] . '</a></h3>';
echo($html);//Affichage de ce que contient la variable
?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
sonia37
Messages postés
39
Date d'inscription
jeudi 12 avril 2007
Statut
Membre
Dernière intervention
29 décembre 2010
2
28 sept. 2009 à 06:12
28 sept. 2009 à 06:12
a
Delphine97224
Messages postés
99
Date d'inscription
lundi 6 juillet 2009
Statut
Membre
Dernière intervention
8 septembre 2011
9
8 oct. 2009 à 22:45
8 oct. 2009 à 22:45
Je te remercie pour ton aide, le conseil et le cadeau. Je n'ai lu la réponse qu'aujourd'hui et je te remercie.
C'était en effet la solution à ma question.
C'était en effet la solution à ma question.