Affichages multiples avec une préselection GROUP BY

Eléphanteau du PHP | 10 Messages

28 juil. 2006, 12:32

Bonjour,
Je voudrais afficher l'ensemble des articles d'une liste de fournisseurs préalablement triés par GROUP BY
Voici le script :
<?php
	include("connect.php");
	$sql = "SELECT fournisseur, article FROM Catalogue GROUP BY fournisseur ORDER BY fournisseur";
	$result = mysql_query($sql);
	while ($row = mysql_fetch_assoc($result)) {
		echo "$row[fournisseur]";
		echo "$row[article]";
		}
		mysql_close($dp);
?>
Le script marche mais n'affiche qu'un article sous chaque fournisseur.

Je cherche à faire un truc du style:
- fournisseur1 :
article1_fournisseur_1, article2_fournisseur_1 .....
- fournisseur2 :
article1_fournisseur_2, article2_fournisseur_2 .....

GROUP BY est-il plus approprié que SELECT DISTINCT ?
Je préfererai aussi éviter deux tables et une jointure ...

Si quelqu'un à une idée merci d'avance ....

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 juil. 2006, 13:07

C'est surtout qu'il ne faut pas utiliser le "group by" dans ce genre de situation, pas plus que le "distinct" :).
Le mieux est de rammener les enregistement sous cette forme :

Code : Tout sélectionner

fournisseur1 , article1_fournisseur_1 fournisseur1 , article2_fournisseur_1 fournisseur1 , article3_fournisseur_1 fournisseur2 , article1_fournisseur_2 fournisseur2 , article2_fournisseur_2 ...
donc juste avec un "order by" pour les trier par fournisseur (et éventuellement ensuite par article) et de boucler dessus.

Il te suffit alors d'afficher puis de stocker dans une variable temporaire le nom du fournisseur, et de ne le réafficher qui si le nom du fournisseur est différent de celui stocké dans la variable tmp :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juil. 2006, 13:09

modération : merci d'utiliser les balises
 pour poster du code[/color]
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 10 Messages

28 juil. 2006, 14:56

Merci pour la réponse,

Je sais que ces questions peuvent paraître stupides pour un habitué du langage, mais en même temps on est sur un forum débutants...

J'ai compris pour le GROUP BY, merci du tuyau...
Je récupère la variable, pas de pb.

Reste plus que la boucle .... encore des plombes a passer dans une fonction mysql_fetch_assoc ou autre ....

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 juil. 2006, 15:11

pour t'éviter d'y passer des plombes, voici déjà une idée de ce que tu peux faire :)

Code : Tout sélectionner

déclarer une variable temporaire initialisée à vide tant qu'il y a des lignes de résultat dans la requête, faire si le nom du fournisseur est différent du nom dans la variable afficher le nom du nouveau fournisseur mettre a jour la variable avec le nom du nouveau fournisseur fin si afficher le nom de l'article fin tant que

Eléphanteau du PHP | 10 Messages

31 juil. 2006, 09:38

merci, mais j'ai pas réussi, je ne connais pas encore suffisamment la syntaxe php/MySql (c'est ca mon pb, pas la logique du langage) .... je vais aller me chercher un bouquin de scripts style "PHP par l'exemple", ca ira plus vite que tatonner des heures ...

Eléphanteau du PHP | 10 Messages

31 juil. 2006, 11:03

pour être plus précis j'ai (j'ai changé les intitulés) :
<?php
				include("connect/connect.php");
				$sql = "SELECT * FROM Catalogue auteur ORDER BY auteur";
				$result = mysql_query($sql);
				
				while ($row = mysql_fetch_array($result)) {
					$ecrivain = "";
						echo "$row[prenom_auteur] $row[auteur]<br>";
						$ecrivain = $row[auteur];
							
							if ($ecrivain = $row[auteur])
							{
							echo "Oeuvres : $row[titre]<br/><br>";
							$ecrivain != $row[auteur];
							}
							else
							$ecrivain != $row[auteur];
						}
						mysql_close($dp);
		?>
qui me donne :

Guy Louis ANXXX
Oeuvres : XXX COMTOISE ( L’) Tome 2

Guy Louis ANXXX
Oeuvres : XXX COMTOISE ( L’) Tome 1

là où j'aurais voulu :
Guy Louis ANXXX
Oeuvres : XXX COMTOISE ( L’) Tome 1, XXX COMTOISE ( L’) Tome 2

etc ....

merci d'avance