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 :

Regrouper suivant une relation [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut Regrouper suivant une relation
    Bonjour,

    Je fais une requete afind e regrouper mes resultats selon une relation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    $selects = 'SELECT * FROM membres GROUP BY relation ORDER BY idm ASC';
    $results = mysql_query($selects) or die ('Erreur : '.mysql_error() );
     
    while ($rows = mysql_fetch_array($results)) {  
     
    	extract($rows);
     
    echo '<b>' .$ayam. '</b><br>';
    echo '<div align="center"><img src="'.$path2dividers.'divider02.gif"></div>';
    }
    ?>
    structure de table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TABLE IF NOT EXISTS `membres` (
      `idm` int(2) NOT NULL auto_increment,
      `relation` int(2) NOT NULL,
      `mem` longtext collate utf8_unicode_ci NOT NULL,
      PRIMARY KEY  (`idm`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
     
    (1, 1, 'mem1'),
    (2, 1, 'mem2'),
    (3, 1, 'mem3'),
    (4, 2, 'mem4'),
    (5, 2, 'mem5');
    J'aimerais les regrouper suivant la clef relation et les afficher comme ca:

    mem1
    mem2
    mem3
    <img src="divider">
    mem4
    mem5
    <img src="divider">
    etc

    Merci

  2. #2
    Membre éprouvé
    Inscrit en
    Décembre 2009
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 80
    Par défaut
    Si tu veux les "regrouper" mais les avoir tous quand même, ce n'est pas GROUP BY qu'il faut utiliser mais ODER BY.

    Tu peux modifier ta requête comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $selects = 'SELECT * FROM membres ORDER BY relation ASC, idm ASC';
    Il te reviendra ensuite de placer ton séparateur au bon endroit quand le champ "relation" n'est plus identique au précédent que tu as affiché.

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par OlgarK Voir le message
    Il te reviendra ensuite de placer ton séparateur au bon endroit quand le champ "relation" n'est plus identique au précédent que tu as affiché.
    Et ou puis je le placer??

  4. #4
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Est ce qu'il y a quelqu'un qui peut aider en comment puis je organiser mes codes afin d'obtenir le resultat souhaite?

  5. #5
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    Il faut que tu repéres le changement de la valeur de 'relation' pour l'affichage de tes echos.

    En gardant, ta structure While par exemle (mais un do .. while serait peut être mieux).

    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
     
    Lecture du premier rows pour mettre en mémoire la valeur de 'relation'
    alors $relationActuelle
     
    // puis le reste de ton code en gros
    while ($rows = mysql_fetch_array($results)) {  
     
    	extract($rows);
     
    if ($rows[1] <> $relationActuelle) {
          $relationActuelle = $rows[1];    // Maj pour suivant
         echo '<b>' .$ayam. '</b><br>';
          echo '<div align="center"><img src="'.$path2dividers.'divider02.gif"></div>';
    }
    }

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par Fench Voir le message
    Bonjour,

    Il faut que tu repéres le changement de la valeur de 'relation' pour l'affichage de tes echos.

    En gardant, ta structure While par exemle (mais un do .. while serait peut être mieux).

    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
     
    Lecture du premier rows pour mettre en mémoire la valeur de 'relation'
    alors $relationActuelle
     
    // puis le reste de ton code en gros
    while ($rows = mysql_fetch_array($results)) {  
     
    	extract($rows);
     
    if ($rows[1] <> $relationActuelle) {
          $relationActuelle = $rows[1];    // Maj pour suivant
         echo '<b>' .$ayam. '</b><br>';
          echo '<div align="center"><img src="'.$path2dividers.'divider02.gif"></div>';
    }
    }
    et c'est quoi: "alors $relationActuelle"??

  7. #7
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Envoyé par OlgarK
    Il te reviendra ensuite de placer ton séparateur au bon endroit quand le champ "relation" n'est plus identique au précédent que tu as affiché.
    Avant le while faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if ($rows = mysql_fetch_array($results))
          $relationActuelle = $rows[1];    // Pour le premier champ "relation"

  8. #8
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Le premier enregistrement n'est pas affiche, et les resultats sont toujours du meme affichage:

    mem1 // ne s affiche pas
    mem2
    <divider>
    mem3
    <divider>
    mem4
    <divider>
    mem5
    <divider>
    etc

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

Discussions similaires

  1. Afficher les tables d'une base ordonnées suivant les relations
    Par gophette dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 27/02/2013, 18h55
  2. comment changer le type d'une relation ?
    Par mitapi dans le forum Access
    Réponses: 5
    Dernier message: 21/05/2007, 10h29
  3. Réponses: 5
    Dernier message: 29/09/2004, 11h05
  4. Exploitation d'une table possédant une relation recursive
    Par VincentR dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/08/2004, 11h07
  5. [Mapping] Structure d'une relation
    Par k4eve dans le forum Hibernate
    Réponses: 6
    Dernier message: 27/04/2004, 11h19

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