fabien62 Posté 20 Avril 2008 Posté 20 Avril 2008 Bonjour, J'ai un petit probléme de jointure, j'ai beau chercher, je ne trouve pas J'ai 2 tables sur ma base de données, 1 table avec les categories principales, et une table avec les sous categories. Ce qui nous donne (exemple): Legumes : carottes salade tomate Fruit : Orange banane pomme Mais j'ai un probléme d'affichage du genre : legumes carottes legumes salade legumes tomate. Je ne parviens pas a faire comme le premier exemple. Voici un exemple de code ( car j'en es essayer beaucoup ) que j'ai utilisé : CODE $rep= mysql_query("SELECT * FROM categories, listecategories WHERE categories.id = listecategories.categp"); while($donnees=mysql_fetch_array($rep)) { //catégories principale echo "$donnees['id'] <br/>"; echo "$donnees['nom'] <br/>"; echo "$donnees['descri'] <p>"; echo '---------------------<br/>'; //sous catégories echo $donnees['nom2']; echo '<br/>'; echo $donnees['descri2']; echo '<p>'; } Un petit coup de main serai le bienvenue. Merci
Damien L Posté 20 Avril 2008 Posté 20 Avril 2008 Normal. Il faut que tu procède de la façons suivante : Commençons par la structure des tables ####TABLE 1 (categories)#### | cat_id | cat_nom | | 1 | Legumes | | 2 | Fruits | ####TABLE2 (listecategories)#### | s_cat_id | cat_id | s_cat_nom | | 1 | 1 | Carottes | | 2 | 2 | Oranges | | 3 | 1 | Salades | $rep= mysql_query("SELECT a.cat_nom, b.s_cat_nom FROM categories a, listecategories b WHERE b.cat_id = a.cat_id");while($donnees=mysql_fetch_array($rep)){ print $donnees['s_cat_nom'].' -> '.$donnees['cat_nom'].'<br />';} Ce qui t'affichera : Carottes -> Légumes Oranges -> Fruits Salades -> Légumes
Damien L Posté 20 Avril 2008 Posté 20 Avril 2008 (modifié) Oups, après relecture, je ne répond pas à ta question ... Je recommence avec mes structures de tables précédentes. $rep_cat= mysql_query("SELECT * FROM categories");while($donnees_cat=mysql_fetch_array($rep_cat)){ print $donnees_cat['cat_nom'].'<br />'; $rep_sous_cat= mysql_query("SELECT * FROM listecategories WHERE cat_id=$donnee_cat['cat_id']"); while($donnees_sous_cat=mysql_fetch_array($rep_sous_cat)) { print ' '.$donnees_sous_cat['s_cat_nom'].'<br />'; } print '<br />';} Modifié 20 Avril 2008 par Damien L
fabien62 Posté 20 Avril 2008 Auteur Posté 20 Avril 2008 Je te remercie, mais j'obtient un parse error : Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in CODE $rep_cat= mysql_query("SELECT * FROM categories"); while($donnees_cat=mysql_fetch_array($rep_cat)) { print $donnees_cat['cat_nom'].'<br />'; $rep_sous_cat= mysql_query("SELECT * FROM listecategories WHERE cat_id=$donnees_cat['cat_id']"); while($donnees_sous_cat=mysql_fetch_array($rep_sous_cat)) { print ' '.$donnees_sous_cat['s_cat_nom'].'<br />'; } print '<br />'; } //fintest sa viendrais de cette ligne : $rep_sous_cat= mysql_query("SELECT * FROM listecategories WHERE cat_id=$donnees_cat['cat_id']");
xpatval Posté 20 Avril 2008 Posté 20 Avril 2008 Essaie comme cela ? $rep_sous_cat= mysql_query("SELECT * FROM listecategories WHERE cat_id='". $donnees_cat['cat_id'] ."'"); xpatval
fabien62 Posté 20 Avril 2008 Auteur Posté 20 Avril 2008 (modifié) Merci, Je n'es plus de parse error mais : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in En faite j'ai deux tables : 1 table categories Avec les champs id - nom - descri(pour description) 1 table listecategories Avec les champs id - nom2 - descri2 - et categp qui reprend l'id de la table categorie ( categp=idcategories ) j'ai donc fait sa : CODE $rep_cat= mysql_query("SELECT * FROM categories"); while($donnees_cat=mysql_fetch_array($rep_cat)) { print $donnees_cat['cat_nom'].'<br />'; $rep_sous_cat= mysql_query("SELECT * FROM listecategories WHERE cat_categp='". $donnees_cat['cat_id'] ."'"); while($donnees_sous_cat=mysql_fetch_array($rep_sous_cat)) { print ' '.$donnees_sous_cat['s_cat_nom2'].'<br />'; } print '<br />'; } Merci Edit j'ai fait un or exit(mysql_error() . "<br/>$requete"); sur rep_sous_cat j'ai trouver cette erreur : suite à sa j'ai mit un ' entre cat_categp>'cat_categp' je n'es plus d'erreur mais rien ne s'affiche. Modifié 20 Avril 2008 par Portekoi
Damien L Posté 20 Avril 2008 Posté 20 Avril 2008 (modifié) Désolé j'ai tapé mon code d'exemple à l'arrache sans le tester Voila une version corrigé : $rep_cat= mysql_query("SELECT * FROM categories");while($donnees_cat=mysql_fetch_array($rep_cat)){ print $donnees_cat['cat_nom'].'<br />'; $rep_sous_cat= mysql_query("SELECT * FROM listecategories WHERE cat_id=".$donnees_cat['cat_id']); while($donnees_sous_cat=mysql_fetch_array($rep_sous_cat)) { print ' - '.$donnees_sous_cat['s_cat_nom'].'<br />'; } print '<br />';} Modifié 20 Avril 2008 par Damien L
xpatval Posté 20 Avril 2008 Posté 20 Avril 2008 Mais avec cette jointure, une seule requête devrait suffire, non ?
fabien62 Posté 20 Avril 2008 Auteur Posté 20 Avril 2008 (modifié) la sa fonctionne comme sa, mais pas trés propre : CODE $rep_cat= mysql_query("SELECT * FROM categories"); while($donnees_cat=mysql_fetch_array($rep_cat)) { print $donnees_cat['nom'].'<br />'; $rep_sous_cat= mysql_query("SELECT * FROM listecategories WHERE categp='". $donnees_cat['id'] ."'") or exit(mysql_error() . "<br/>$requete"); while($donnees_sous_cat=mysql_fetch_array($rep_sous_cat)) { echo $donnees_sous_cat['nom2']; echo '<br/>'; } print '<br />'; } J'essaie celui que tu viens de mettre et je te dit quoi, merci Fonctionne pas : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in J'ai fait quelques modifs sur ton dernier ajout, c'est ok. Un grand merci à toi Modifié 20 Avril 2008 par Portekoi
Damien L Posté 20 Avril 2008 Posté 20 Avril 2008 Mais avec cette jointure, une seule requête devrait suffire, non ? Il n'y a pas de jointure là. Par contre, si quelqu'un a une solution en faisant une jointure, ça m'intéresse.
xpatval Posté 20 Avril 2008 Posté 20 Avril 2008 Il n'y a pas de jointure là. Ah, pour moi, il y en a une. Et elle est d'ordre 1-N. Rapidement: Table 1 (categories): id_cat nom Table 2 sous-categories: id_ss_cat id_cat (le champ de jointure = id_cat de la Table1) nom Ensuite, ta requête: Select categories.nom, sous-categories.nom from categories, sous-categories where categories.id_cat = sous-categories.id_cat A moins que je n'ai rien compris à la question...
Damien L Posté 20 Avril 2008 Posté 20 Avril 2008 Oui, il y a bien une jointure dans mon premier exemple et ton exemple également. Mais pas dans le dernier code que j'ai donné. Avec une jointure, je sais faire ça : Carottes -> Légumes Oranges -> Fruits Salades -> Légumes Mais pas ça : Légumes : - carottes - salade - tomate Fruit : - orange - banane - pomme
xpatval Posté 21 Avril 2008 Posté 21 Avril 2008 Alors dans ce cas, il ne s'agit plus d'un problème de requête, mais d'affichage, donc de PHP. Tu dois d'abord initialiser une variable à blanc $old_cat = ""; Puis tu effectues la (seule) requête Select categories.nom AS categ, sous-categories.nom AS ss_categ from categories, sous-categories where categories.id_cat = sous-categories.id_cat . Dans la boucle, tu testes la valeur de la variable $old_cat. while($i = mysql_fetch_array(.....)){ If ($old_cat == "") { echo $i['categ']."<br />"; echo $i['ss_categ']."<br />"; } elseif ($old_cat != "") || ($old_cat != $i['categ']) { echo $i['categ']."<br />"; echo $i['ss_categ']."<br />"; } else echo $i['ss_categ']."<br />"; $old_cat = $i['categ'];} A parfaire probablement, mais c'est le principe. xpatval
Damien L Posté 21 Avril 2008 Posté 21 Avril 2008 Ha oui, je vois ! C'est en effet beaucoup moins lourd qu'une double requête
Portekoi Posté 21 Avril 2008 Posté 21 Avril 2008 Tu peux aussi utiliser un "CASE" qui est un "IF" à la SQL
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant