[PHP/MYSQL] Besoin d'aide pour la simplification d'une requete
4 messages
• Page 1 sur 1
-

oli004 - WRInaute passionné

- Messages: 2173
- Inscription: 5 Jan 2005
[PHP/MYSQL] Besoin d'aide pour la simplification d'une requete
Bonjour tout le monde,
Je veux compter le nombre de participant par cours avec toutes les données en bdd bien sur. Actuellement, une solution qui fonctionne mais qui me semble bien lourde :
J'imagine qu'il y a moyen de placer tout ça en une seule requete et dans un array, mais je n'y suis pas familler, donc je requiere un petit coup de main
Je veux compter le nombre de participant par cours avec toutes les données en bdd bien sur. Actuellement, une solution qui fonctionne mais qui me semble bien lourde :
- Code: Tout sélectionner
$result_latin_deb = mysql_query("SELECT * FROM inscriptions WHERE latin_deb = '1'", $db);
$num_rows_latin_deb = mysql_num_rows($result_latin_deb);
$result_latin_pra = mysql_query("SELECT * FROM inscriptions WHERE latin_pra = '1'", $db);
$num_rows_latin_pra = mysql_num_rows($result_latin_pra);
...
idem pour 10 disciplines
puis :
echo "<b>".$num_rows_latin_deb."</b> pratiquent les <b>danses latines débutant</b><br />";
echo "<b>".$num_rows_latin_pra."</b> pratiquent les <b>danses latines pratiquant</b><br />";
...
J'imagine qu'il y a moyen de placer tout ça en une seule requete et dans un array, mais je n'y suis pas familler, donc je requiere un petit coup de main
- jcaron
- WRInaute accro

- Messages: 2685
- Inscription: 13 Fév 2004
Re: [PHP/MYSQL] Besoin d'aide pour la simplification d'une requete
Ben si les critères sont des colonnes différentes à chaque fois ça ne va pas être tip top.
Idéalement, tu devrais avoir une seule colonne qui indique le cours, et dans ce cas tu peux faire:
Dans ton cas ça va être nettement plus chaud, mais tu peux tenter:
Tu obtients évidemment dans les deux cas un tableau avec une ligne par cours, le nom du cours en première colonne et le nombre d'inscrits dans la deuxième.
Jacques.
Idéalement, tu devrais avoir une seule colonne qui indique le cours, et dans ce cas tu peux faire:
- Code: Tout sélectionner
select cours,count(*) from inscriptions group by cours
Dans ton cas ça va être nettement plus chaud, mais tu peux tenter:
- Code: Tout sélectionner
select case when latin_deb=1 then 'latin_deb' when latin_pra=1 then 'latin_pra' ... end as cours,count(*) from inscriptions group by 1
Tu obtients évidemment dans les deux cas un tableau avec une ligne par cours, le nom du cours en première colonne et le nombre d'inscrits dans la deuxième.
Jacques.
-

oli004 - WRInaute passionné

- Messages: 2173
- Inscription: 5 Jan 2005
Re: [PHP/MYSQL] Besoin d'aide pour la simplification d'une requete
Merci pour ta proposition jcaron, mais je pense que je vais rester avec la solution actuelle. Il y a en effet une colone par cours avec 1 si pratiqué et 0 si non pratiqué. C'était une question de choix dès le départ. Ca fonctionne ainsi, c'est déja ça.
Merci tout de même.
Merci tout de même.
- jcaron
- WRInaute accro

- Messages: 2685
- Inscription: 13 Fév 2004
Re: [PHP/MYSQL] Besoin d'aide pour la simplification d'une requete
L'inconvénient de ta solution, c'est qu'à chaque cours ajouté tu vas devoir ajouter une colonne et modifier ton code, c'est pas top pratique. Et évidemment ça complique toutes sortes de rapports comme tu t'en rends compte.
L'autre solution judicieuse (plus si dans ta table originale il s'agit d'une ligne par utilisateur, et que chaque utilisateur peut suivre plusieurs cours) est d'avoir une table pour les utilisateurs, une table pour les cours, et une table de "jointure" (qui contient une colonne pour l'utilisateur et une pour le cours).
Genre:
- table utilisateurs: id, nom, etc.
- table cours: id, nom, etc.
- table utilisateur_cours: id_utilisateur, id_cours
Tu peux alors obtenir ce que tu veux en faisant un:
Et pour obtenir le détail de tous les cours de chaque utilisateur:
Ou pour les excités du join explicite:
Jacques.
L'autre solution judicieuse (plus si dans ta table originale il s'agit d'une ligne par utilisateur, et que chaque utilisateur peut suivre plusieurs cours) est d'avoir une table pour les utilisateurs, une table pour les cours, et une table de "jointure" (qui contient une colonne pour l'utilisateur et une pour le cours).
Genre:
- table utilisateurs: id, nom, etc.
- table cours: id, nom, etc.
- table utilisateur_cours: id_utilisateur, id_cours
Tu peux alors obtenir ce que tu veux en faisant un:
- Code: Tout sélectionner
select id_cours,count(*) from utilisateur_cours group by id_cours
Et pour obtenir le détail de tous les cours de chaque utilisateur:
- Code: Tout sélectionner
select * from utilisateurs u,cours c,utilisateurs_cours uc where u.id=uc.id_utilisateur and c.id=uc.id_cours
Ou pour les excités du join explicite:
- Code: Tout sélectionner
select * from utilisateurs u join utilisateurs_cours uc on (uc.id_utilisateur=u.id) join cours on (uc.id_cours=c.id)
Jacques.
4 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Aide php/mysql requête svp
- Aide pour optimiser l'écriture d'une requete PHP/MYSQL
- [PHP/MYSQL] Besoin d'aide dans une requête
- aide requete MYSQL
- Requete Mysql AIDE svp !
- Aide pour requête MySQL
- Aide requête MySQL avec count
- Aide pour une requête MySQL
- Requête MySQL besoin d'aide
- [PHP/MySQL] Excepter une valeur dans un requête SQL en PHP
Qui est en ligne
Utilisateurs parcourant ce forum: Zecat et 1 invité
