IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Elaboration d'un classement


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut [SQL] Elaboration d'un classement
    Bonjour à tous !

    Voilà je débute en programmation et je planche sur un petit problème depuis quelques temps qui est d'établir un classement par département en fonction du nombre d'inscrits. Tous les post sont les bienvenus

    Aussi pour se faire j'ai mis en place deux bases de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     "CREATE TABLE $mbmembre (
      id int(11) NOT NULL auto_increment,
      hid int(11) NOT NULL default '0',
      sid int(11) NOT NULL default '0',            -------------> code département
      nom varchar(80) NOT NULL default '',
      url varchar(150) NOT NULL default '',
      email varchar(80) NOT NULL default '',
      PRIMARY KEY  (id)
    ) 
    ";
     
    "CREATE TABLE $mbdepartement (
      id int(11) NOT NULL auto_increment,
      hid int(11) NOT NULL default '0',
      nom varchar(80) NOT NULL default '',
      photo text NOT NULL,
      PRIMARY KEY  (id)
    ) 
    ";
    la base 'mbmembre' inscrit l'internaute qui entre ses infos et choisi entre les différents départements de la base 'mbdepartement' préalablement remplie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sids = mysql_query("SELECT * FROM $mbdepartement");
    while ($myrow = mysql_fetch_row($sids)) {
    Le dilemne serait [sur une page] d'établir un classement en fonction du nombre de départements enregistrés, et de faire appel simultanément aux deux bases de données où le code sid des membres ,relatif à son département, serait remplacé par le nom du département.

    Concrètement j'aimerais arriver au résultat suivant


    Nom Inscrit Evolution

    Eure 5 +2places
    Sarthe 4 +1place
    Orne 2 =
    Iles et Vilaine 1 -2 places

    .....


    Merci d'avance de votre aide et disponibilité !

  2. #2
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Re,

    J'oubliais, hier après un petit tour sur les forums et l'étude approximative d'un tuto traitant de clé étrangère et jointure, j'ai réflechi et je fléchis. Voici ma réflexion :

    >>Je dois établir un classement par département en fonction du nombre d'inscrits à partir de deux tables différentes.

    Pour se faire, je dois calculer le nombre de 'sid' de ma table 'mbmembre' et associer le nombre de 'sid' obtenu pour chaque département au 'nom' de la table 'mbdepartement' correspondant.

    Concernant le classement je tente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "SELECT [le 'nom' de ma table 'mbdepartement], [nombre 'sid' par catégorie de 'mbmembre'] FROM 'mbmembre' et 'mbdepartement' BY [nbre de 'sid'] DESC;
    Help me please :p

    Merci d'avance

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Par défaut la requete
    salut
    m --> la table des mebre et
    dep --> table des dep

    voici la requte sql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT dep.nom,count( * ) AS nb
    FROM dep
    JOIN m
    WHERE m.sid = dep.id
    GROUP BY dep.id
    order by nb desc
    LIMIT 0 , 30
    ca calcule le nombre des membre pour chaque departement et serra donée dans l'ordre . du premier au dernier .

    mais il ya un truc , pour l'evolution il faudra sans doute une autre table pour staocker le nombre de personne inscrite a une date arrété ..
    bref te me dirra ce que tu en pense

  4. #4
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Merci php4life ! La méthode est bonne est les résultats s'affichent comme je le souhaite
    Cependant, lorsque j'ouvre la page de résultat, le classement omet automatiquement une entrée. J'ai pas pu déterminer si ça venait de l'id. Concrètement pour afficher 10 résultats, la page m'en montrera que 9...

    Voici le code de la page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
    <?php
    include ("page_haut.inc");
    include ("configuration.php");
     
    $select='SELECT sbbsouscat.nom,count( * ) AS nombre FROM sbbsouscat JOIN sbbproduit WHERE sbbproduit.sid = sbbsouscat.id GROUP BY sbbsouscat.id ORDER BY nombre desc LIMIT 0 , 30';
    	$result=mysql_query($select) or die ('Erreur : '.mysql_error() ); 
    	$row = mysql_fetch_array($result);
        $nombre = $row['nombre'];
     
     
     
    echo '<table bgcolor="#FFFFFF">'."\n"; 
            // première ligne on affiche les titres prénom et surnom dans 2 colonnes 
            echo '<tr>'; 
            echo '<td bgcolor="#669999"><b><u>Pays</u></b></td>'; 
    		echo '<td bgcolor="#669999"><b><u>Inscription(s)</u></b></td>';
            echo '</tr>'."\n"; 
        // lecture et affichage des résultats sur 2 colonnes     
        while($row = mysql_fetch_array($result)) { 
            echo '<tr>'; 
    		echo '<td bgcolor="#CCCCCC">'.$row['nom'].'</td>';
    		echo '<td bgcolor="#CCCCCC">'.$row['nombre'].'</td>';
            echo '</tr>'."\n"; 
        } 
        echo '</table>'."\n"; 
     
     
    ?>
    Je pense que le problème est tout bête, enfin j'espère Voilà encore merci

  5. #5
    Membre chevronné Avatar de papyphp
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 438
    Par défaut
    Salut,

    C'est à cause des deux lignes en rouge.
    Tu fais un premier appel à mysql_fetch_array(), ça incrémente le compteur interne et quand tu fais ton while, il commence à la deuxième ligne.

    $select='SELECT sbbsouscat.nom,count( * ) AS nombre FROM sbbsouscat JOIN sbbproduit WHERE sbbproduit.sid = sbbsouscat.id GROUP BY sbbsouscat.id ORDER BY nombre desc LIMIT 0 , 30';
    $result=mysql_query($select) or die ('Erreur : '.mysql_error() );
    $row = mysql_fetch_array($result);
    $nombre = $row['nombre'];

    echo '<table bgcolor="#FFFFFF">'."\n";
    // première ligne on affiche les titres prénom et surnom dans 2 colonnes
    echo '<tr>';
    echo '<td bgcolor="#669999"><b><u>Pays</u></b></td>';
    echo '<td bgcolor="#669999"><b><u>Inscription(s)</u></b></td>';
    echo '</tr>'."\n";
    // lecture et affichage des résultats sur 2 colonnes
    while($row = mysql_fetch_array($result)) {
    echo '<tr>';
    echo '<td bgcolor="#CCCCCC">'.$ro...
    Bonne continuation

  6. #6
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Donc si j'ai bien compris, je remplace mysql_fetch_array par mysql_num_rows par exemple C'est ça ?

  7. #7
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Nan en fait j'ai pas bien compris ! Je suis sur php débutant qui explique la signification de chaque fonction et là j'avoue que je suis un peu paumée J'ai saisi ton idée 'Papyphp' mais je saisi pas par quoi le remplacer ...

  8. #8
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Bon c'est encore moi! juste pour vous dire que mon problème était résolu:
    J'ai remplacé $row = mysql_fetch_array($result); par $row = mysql_query($result);

    Et finalement le while j'ai remplacé par mysql_fetch_assoc qui semblait conseillé dans la plupart des cas!
    Voilà merci à php4life et Papyphp ,
    Tout ceci m'ouvre d'autres pistes de travail pour la semaine prochaine

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Par défaut
    bah ca serrai bien de mettre [resolut] dans le titre du topic :p
    ca eviterai a beaucoup de personne de lire des centaines de lignes de codes pour rien hahahahéé
    de rien !

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 99
    Par défaut
    non c'etait bon c'est juste que tu appelais 2 fois la fonction mysql_fetch_array donc il passait directement a l'enregistrement 2 et le 1 on l'oubliait

    tu n'as juste qu'à remplacer ces 2 lignes
    $row = mysql_fetch_array($result);
    $nombre = $row['nombre'];
    par
    $nombre = $result[0]['nombre'];
    si je dis pas de betises

  11. #11
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Oups j'avais pas vu, désolée ! Mais je vois que les modérateurs s'en sont chargés pour moi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL Server] problème de classement, calcul d'un rang
    Par lepeule dans le forum Langage SQL
    Réponses: 12
    Dernier message: 22/10/2019, 10h31
  2. [SQL Server2008] Criteres de classement
    Par hwoarang dans le forum Développement
    Réponses: 6
    Dernier message: 29/03/2011, 13h15
  3. requete SQL avec regroupement et classement par ordre croissant
    Par adelsunwind dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 31/03/2009, 16h01
  4. requete sql pour faire un classement
    Par beezee dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/03/2006, 13h03
  5. classement en sql (enfin je ne sais pas comment appeler)
    Par shirya dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/09/2005, 08h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo