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 :

Group by champ [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    oim
    oim est déconnecté
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 118
    Par défaut Group by champ
    Bonjour, j'espère être dans le bon forum !

    J'ai une table composé de 6 champs (continent, pays, region, departement, ville, pseudo) qui me permet de savoir d'ou vient mes membres.

    J'essaye de faire un script qui regroupe l'affichage par rapport au continent puis au pays puis au region puis au departement puis à la ville pour enfin afficher la liste des pseudos.

    Ma 1ère idée est d'utilisé "group by" ca fonctionne bien pour un champ mais pas pour les autres.

    Si une personne sait comment je pourrai faire ou a une piste, merci d'avance !

  2. #2
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Tu peux faire un groupby sur plusieurs champs
    exemple:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT continent, pays, region, departement, ville, COUNT(*) AS NbPseudoByZone
    GROUP BY continent, pays, region, departement, ville

    pour afficher le nombre de pseudos existant pour chaque ville de chaque departement de chaque region, etc.

  3. #3
    oim
    oim est déconnecté
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 118
    Par défaut
    Merci de l'aide !

    Pour l'instant j'en suis là :

    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
     
    echo '<table width="80%" border="1" cellspacing="2" cellpadding="2" align="center" class="header">';
    echo '<tr>';
     
    	$result=mysql_query("select id, pseudo, cont, pays, region, dpt, ville, COUNT(*) AS pseudo from loc_adr GROUP BY cont, pays, region, dpt, ville");
     
    	while (list($id,$pseudo,$cont,$pays,$region,$dpt,$ville) = mysql_fetch_array($result)) {
     
    echo '<td>';
    	if($cont == $pseudo["cont"]) echo $pseudo["cont"]; else echo '';
    echo '</td><td>';
    	if($pays == $pseudo["pays"]) echo $pseudo["pays"]; else echo '';
    echo '</td><td>';
    	if($region == $pseudo["region"]) echo $pseudo["region"]; else echo '';
    echo '</td><td>';
    	if($dpt == $pseudo["dpt"]) echo $pseudo["dpt"]; else echo '';
    echo '</td><td>';
    	if($ville == $pseudo["ville"]) echo $pseudo["ville"]; else echo '';
    echo '</td><td>'.$pseudo.'</td><td>';
    	}
    echo '</tr>';
    echo '</table><br />';
    Ca ne m'affiche que les pseudos, c'est donc faux mais je ne sais pas trop pourquoi !

  4. #4
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    je ne comprends pas ce que tu fais dans ton code et ce que toi tu veux faire là...
    tu récupères la liste de tes colonnes dans des variables séparées (c'est a ca que sert ton list(...) alors pourquoi tu utilises $pseudo["cont"] ??

    dis nous plutot a quel résultat tu veux arriver

  5. #5
    oim
    oim est déconnecté
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 118
    Par défaut
    Le résultat que je veux :

    J'aimerai arriver à cette affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Europe - France - corse - corse du sud   - Ajaccio - membre1,membre2
                             corse du nord  - Bastia  - membre3,membre4
    Asie      - Chine  -         -          - Hong Kong - membre5
    Au lieu d'avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Europe - France - corse - corse du sud   - Ajaccio        - membre1
    Europe - France - corse - corse du sud   - Ajaccio        - membre2
    Europe - France - corse - corse du nord  - Bastia         - membre3
    Europe - France - corse - corse du nord  - Bastia         - membre4
    Asie      - Chine   -         -                      - Hong Kong - membre5

  6. #6
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Ahhhhhhh bah dans ce cas il ne faut pas utiliser les Group BY ca n'est pas vraiment leur but.
    Fais plutot une requete qui retourne tous les pseudos classés par continent, puis pays, puis etc...
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select id, pseudo, cont, pays, region, dpt, ville, pseudo from loc_adr ORDER BY cont, pays, region, dpt, ville, pseudo

    Ensuite, tu gardes ta boucle qui affiche chaque pseudo un par un et pour chaque pseudo tu regardes si le pseudo précédent (celui de la boucle avant) était dans la meme ville, la meme region etc. Et selon que c'est oui ou non tu affiches la nouvelles région/ville

    Exemple avec les continents
    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
     
    $dernierContinent = "";
    $result=mysql_query("select id, pseudo, cont, pays, region, dpt, ville, pseudo from loc_adr ORDER BY cont, pays, region, dpt, ville, pseudo");
     
    while ($Ligne = mysql_fetch_array($result)) 
    {
    // regarde si le membre est dans le meme continent que le membre précédent
    // si c'est aps le cas, on mémorise le nouveau continent et on l'affiche
    if($dernierContinent != $Ligne['cont'])
      {
      $dernierContinent = $Ligne['cont'];
      echo "Continent : $dernierContinent<br/>";
      }
     
    // on affiche le nouveau membre
    echo $Ligne['pseudo'] . "<br/>";
    }
    ca devrait t'afficher quelquechose comme ca:
    Continent1
    membre1
    membre2
    Continent2
    membre3
    Continent3
    membre4

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

Discussions similaires

  1. [1.x] generator.yml : ajouter un commentaire pour un groupe de champs
    Par Invité dans le forum Symfony
    Réponses: 1
    Dernier message: 16/02/2012, 10h38
  2. [WD12] Modifier la position d'un groupe de champs
    Par Kestumate dans le forum WinDev
    Réponses: 2
    Dernier message: 04/05/2010, 17h38
  3. SQL: Group by champ datetime
    Par magicsam dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/04/2010, 15h36
  4. Comment nommer un champ ? Un groupe de champ ?
    Par SmOkEiSBaD dans le forum Word
    Réponses: 20
    Dernier message: 11/06/2008, 15h23
  5. groupe un champs en dataset
    Par hablo_ved dans le forum VB.NET
    Réponses: 3
    Dernier message: 12/05/2008, 23h53

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