Affichages multiples avec une préselection GROUP BY

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Affichages multiples avec une préselection GROUP BY

par gandalf25 » 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

par gandalf25 » 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 ...

par Ryle » 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

par gandalf25 » 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 ....

par zeus » 28 juil. 2006, 13:09

modération : merci d'utiliser les balises
 pour poster du code[/color]

par Ryle » 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 :)

Affichages multiples avec une préselection GROUP BY

par gandalf25 » 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 ....