Page 1 sur 1

Regrouper suivant une relation

Posté : 14 janv. 2010, 05:56
par Fredy07
Bonjour,

Je fais une requete afind e regrouper mes resultats selon une relation:
<?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 : Tout sélectionner

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

Re: Regrouper suivant une relation

Posté : 14 janv. 2010, 12:03
par macgawel
Il faut utiliser une variable que tu vas comparer à la valeur de RELATION :
/*
On initialise la variable qui va servir à tester le changement de "groupe"
*/
$group_relation = 1;
while ($rows = mysql_fetch_array($results)) {
	extract($rows);
/*
On va comparer le "groupe de relation courant à celui de l'enregistrement
S'ils sont différents, on insère un séparateur ET on met à jour la variable
*/
	if ($group_relation !== $relation) {
		echo '<div align="center"><img src="'.$path2dividers.'divider02.gif"></div>';
		$group_relation = $relation;
	}
	echo '<b>' .$ayam. '</b><br>';
}

Re: Regrouper suivant une relation

Posté : 15 janv. 2010, 05:02
par Fredy07
Merci macgawel, d'apres ce que j'ai cmpris qu'on doit savoir quand est ce qu'on doit mettre le divider, la reponse est au changement du "relation", la question est pourquoi vous avez donne 1 a la variable groue_relation?

Merci

Re: Regrouper suivant une relation

Posté : 15 janv. 2010, 11:57
par macgawel
La ligne $group_relation = 1; est complétement arbitraire.

En fait, vous (tu permets que je te vouvoie, vue que tu me vouvoies ? :twisted: ) avez deux solutions :
1. Vous connaissez le premier idm. Dans ce cas, le plus simple est d'initialiser $group_relation à cette valeur (c'est pour ça que je l'ai initialisé à 1)

2. Vous ne connaissez pas le premier idm (ou vous êtes consciencieux :) ). Dans ce cas :
- Initialisation de $group_relation à une valeur impossible (FALSE, par exemple).
- Dans la boucle, il faudra alors tenir compte du fait qu'on ne commence pas par un séparateur.
Du coup, on va faire un test supplémantaire :
        if ($group_relation !== $relation) { // On teste si on change de groupe
                if ($group_relation !== FALSE) { // On n'affiche pas le séparateur pour le premier groupe
                      echo '<div align="center"><img src="'.$path2dividers.'divider02.gif"></div>';
                }
                $group_relation = $relation;
        }

Re: Regrouper suivant une relation

Posté : 17 janv. 2010, 07:13
par Fredy07
Je vais le tester merci

Re: Regrouper suivant une relation

Posté : 18 janv. 2010, 14:00
par Fredy07
Merci macgawel, j'ai utilise celui la:
/*
On initialise la variable qui va servir à tester le changement de "groupe"
*/
$group_relation = 1;
while ($rows = mysql_fetch_array($results)) {
        extract($rows);
/*
On va comparer le "groupe de relation courant à celui de l'enregistrement
S'ils sont différents, on insère un séparateur ET on met à jour la variable
*/
//echo $group_relation;
                if ($group_relation !== $relation) { // On teste si on change de groupe
                if ($group_relation !== 1) { // On n'affiche pas le séparateur pour le premier groupe
                      echo '<div align="center"><img src="'.$path2dividers.'divider02.gif"></div>';
                }
                }
                $group_relation = $relation;
                
        echo $relation.'   <b>' .$idm.'<img src="Mes_Images/Icones/aya_key_r.gif" class="Img01" align="absmiddle" ....>';
En principe, on donne 1 a groupe_relation, on l'incremente avec le loop, quand c'est different de relation on insere le divider, si j'ai bien compris le principe :)
Merci encore une fois