Problème d'affichage en php

[Résolu]
Signaler
Messages postés
5
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
9 avril 2008
-
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
Bonjour à tous,

Dans ma base mysql, je posséde 2 tables nommées respectivement marque et produit. La table marque est composé comme ceci :
id_marque int
designation varchar(50)
...
Cette table est composé des éléments suivant :
1 - Thomson
2 - LG

Et la table produit
id_produit int
id_marque int (provient de la table marque)
design varchar(50)
...
Cette table est composé des éléments suivant
1 - 1(Thomson) - Réfrigérateur
2 - 1(Thomson) - Lave Linge
3 - 2(LG) - Téléphone
4 - 2(LG) - Télévision
5 - 2(LG) - HI-FI

Je voudrais afficher des éléments qui viennent des 2 tables c'est-à-dire la designation de la table Marque et pour cette designation, je voudrais afficher les designation de la table Produit qui correspondent à la designation de la Marque:
Bon en exemple (je voudrais que ca m'affiche cela) :
Marque : Thomson - Produit : Réfrigérateur - Lave Linge
Marque : LG Produit : Téléphone - Télévision - HI-FI

Pour le moment, ca m'affiche
Marque : Thomson - Produit : Réfrigérateur
Marque : Thomson - Produit : Lave Linge
Marque : LG - Produit : Téléphone
Marque : LG - Produit : Télévision
Marque : LG - Produit : HI-FI

En somme, je voudrai que la marque ne s'affiche qu'une fois et que pour chaque marque tous les produits s'affiche
Voila le code que j'utilise pour faire afficher tout cela :
<?php include ('fonction/configuration.php'); ?>
<?php $reponse mysql_query ("SELECT * FROM marque, produit WHERE marque.id_marque produit.id_marque"); 
       
while ($donnees = mysql_fetch_array($reponse)) 

?> 
marque <?php echo $donnees['designation'];?>

produit : <?php echo $donnees['design'];?>

<?php 

mysql_close(); 
?>
Le problème est que l'affichage de la marque est dans la boucle WHILE. J'ai essayé de mettre un GROUP BY ou un DISTINCT mais ca marche pas mieux ou encore moins bien.
Avez-vous une idée de comment je peux faire. J'espère que vous m'avez compris.

9 réponses

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
<?php include ('fonction/configuration.php');$reponse mysql_query ("SELECT * FROM marque, produit WHERE marque.id_marque produit.id_marque") or die(mysql_error())
$o=false;
while ($donnees = mysql_fetch_array($reponse)) 

if ($o!==$donnees['designation']) echo '
marque'.$donnees['designation'].'
produit :
';
$o=$donnees['designation'];
echo $donnees['design'].'-';
}
?>




/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
salut
t'as une requete genre :$reponse mysql_query ("SELECT * FROM marque, produit WHERE marque.id_marque produit.id_marque");
il te faut plutot une requete genre :
$reponse mysql_query ("SELECT * FROM marque LEFT JOIN produit WHERE marque.id_marque produit.id_marque") or die(mysql_error());

si ca ne fonctionne pas, alors c'est certainement un RIGTH JOIN et pas un LEFT JOIN
/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
Messages postés
5
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
9 avril 2008

Re,

Ca ne fonctionne pas mieux. J'ai essayé un left join ou un right join mais c'est toujours pareil. Voila le code de la requête SQL :$reponse mysql_query ("SELECT * FROM marque LEFT JOIN produit ON marque.id_marque produit.id_produit");
Ca m'affiche comme avant ...
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
Oh... je suis bete, ouais desole, j'etais a cote la...

tu ne peux pas faire ca en mysql, faut que tu traites en php pour faire ca...

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
Messages postés
5
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
9 avril 2008

"Oh... je suis bete, ouais desole, j'etais a cote la...

tu ne peux pas faire ca en mysql, faut que tu traites en php pour faire ca..."


??????

Là, je ne suis vraiment pas avancé ????
Messages postés
5
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
9 avril 2008

Tu es un chef coucou747

Peut tu m'expliquer ta démarche.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
hum... c'est la reponse qui t'aide qu'il faut valider (pour le moteur de recherche, c'est mieux)

ma demarche :

on place $o a false, $o c'est comme $old, ca contient l'ancienne valeur de la marque.

dans la boucle, si tu changes de valeur, ca se voit comme ca : if ($o!==$donnees['designation']) ensuite le reste vient tout seul... faut pas oublier de mettre $o a jours.

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
Messages postés
5
Date d'inscription
samedi 11 juin 2005
Statut
Membre
Dernière intervention
9 avril 2008

OK, j'ai fait le changement. J'avais mal compris le bouton "Réponse Acceptée".
Merci de m'avoir répondu si rapidement
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
:) mais de rien :)

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/