[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 629
    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 579
    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 629
    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 579
    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] Besoin d'aide dans une requête Administration d'un site Web 17 Juin 2005
[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/MYSQL] Action selon le contenu de la variable Développement d'un site Web ou d'une appli mobile 27 Mai 2009
[PHP/MySQL] Problème dans le tri Développement d'un site Web ou d'une appli mobile 26 Août 2008
[PHP/MySQL] Optimisation multiples requêtes Développement d'un site Web ou d'une appli mobile 24 Juin 2008
[php / mysql] Une grosse table ou plusieurs petites tables ? Développement d'un site Web ou d'une appli mobile 8 Avril 2008
[PHP/MYSQL] Une news par page Développement d'un site Web ou d'une appli mobile 20 Mars 2008
[PHP MYSQL] Affecter plusieurs enregistrements Développement d'un site Web ou d'une appli mobile 18 Décembre 2007
[php/MySQL] Tirage au sort avec pondération Développement d'un site Web ou d'une appli mobile 12 Décembre 2007
[résolu][php/MySQL] Problème d'appel à une base Développement d'un site Web ou d'une appli mobile 29 Août 2007
[PHP/MySQL] : se proteger des injections Développement d'un site Web ou d'une appli mobile 26 Avril 2007
[PHP/MySQL] Parser le résultat d'une BDD Développement d'un site Web ou d'une appli mobile 8 Juin 2006
[PHP-MySQL] : argument is not a valid MySQL ressource Développement d'un site Web ou d'une appli mobile 20 Février 2006
[phpMySQL] - Ecarter les colonnes vides Développement d'un site Web ou d'une appli mobile 8 Février 2006
[PHP MYSQL] Synchronisation des requêtes Administration d'un site Web 24 Juin 2005