cameleon30
Messages postés5Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention 9 avril 2008
-
9 avril 2008 à 15:28
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 2012
-
9 avril 2008 à 19:19
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.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 9 avril 2008 à 18:11
<?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'].'-';
}
?>
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 9 avril 2008 à 16:33
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
*/
cameleon30
Messages postés5Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention 9 avril 2008 9 avril 2008 à 17:45
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 ...
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 9 avril 2008 à 18:51
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.