[PHP/MYSQL] Besoin d'aide pour la simplification d'une requete

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par oli004, 9 Juillet 2009.

  1. oli004
    oli004 WRInaute passionné
    Inscrit:
    5 Janvier 2005
    Messages:
    1 643
    J'aime reçus:
    0
    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 :
    Code:
    $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 :wink:
     
  2. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 593
    J'aime reçus:
    0
    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:
    Code:
    select cours,count(*) from inscriptions group by cours
    
    Dans ton cas ça va être nettement plus chaud, mais tu peux tenter:
    Code:
    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.
     
  3. oli004
    oli004 WRInaute passionné
    Inscrit:
    5 Janvier 2005
    Messages:
    1 643
    J'aime reçus:
    0
    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.
     
  4. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 593
    J'aime reçus:
    0
    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:
    Code:
    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:
    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:
    select * from utilisateurs u join utilisateurs_cours uc on (uc.id_utilisateur=u.id) join cours on (uc.id_cours=c.id)
    
    Jacques.
     
Chargement...
Similar Threads - [PHP MYSQL] Besoin Forum Date
[PHP/MySQL] Choix du moteur MyISAM ou InnoDB ? Développement d'un site Web ou d'une appli mobile 14 Janvier 2017
[php/mysql] Eviter de faire 20 requêtes pour un affichage Développement d'un site Web ou d'une appli mobile 19 Janvier 2016
[PHP/MYSQL] Les articles les plus commentés Développement d'un site Web ou d'une appli mobile 22 Octobre 2011
[PHP/MySQL] Excepter une valeur dans un requête SQL en PHP Développement d'un site Web ou d'une appli mobile 18 Septembre 2010
[PHP/MySQL] Compter le nombre de checkbox cochées Développement d'un site Web ou d'une appli mobile 11 Septembre 2010
[PHP/MySQL] Augmenter la valeur de 1 sur une entrée INT Développement d'un site Web ou d'une appli mobile 3 Septembre 2010
[PHP] Détecter le navigateur / bot en fonction du HTTP_USER_AGENT Développement d'un site Web ou d'une appli mobile 14 Septembre 2019
[PHP] Détecter le navigateur / bot en fonction du HTTP_USER_AGENT Développement d'un site Web ou d'une appli mobile 12 Janvier 2017
[PHP] Cookie vide dans une fonction, complet juste avant ou après Développement d'un site Web ou d'une appli mobile 25 Novembre 2014
[php] Cookie d'un domaine vers un sous-domaine Développement d'un site Web ou d'une appli mobile 29 Août 2014
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice