Aller au contenu

Pb de jointure


fabien62

Sujets conseillés

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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é par Damien L
Lien vers le commentaire
Partager sur d’autres sites

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']");

Lien vers le commentaire
Partager sur d’autres sites

Essaie comme cela ?

$rep_sous_cat= mysql_query("SELECT * FROM listecategories WHERE cat_id='". $donnees_cat['cat_id'] ."'");

xpatval

Lien vers le commentaire
Partager sur d’autres sites

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é par Portekoi
Lien vers le commentaire
Partager sur d’autres sites

Désolé j'ai tapé mon code d'exemple à l'arrache sans le tester :nonono:

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é par Damien L
Lien vers le commentaire
Partager sur d’autres sites

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 :thumbsup:

Modifié par Portekoi
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...