Aller au contenu

Sujets conseillés

Posté

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

Posté

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

Posté (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é par Damien L
Posté

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

Posté

Essaie comme cela ?

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

xpatval

Posté (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é par Portekoi
Posté (modifié)

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
Posté (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 :thumbsup:

Modifié par Portekoi
Posté
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.

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

Posté

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

Posté

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

Veuillez vous connecter pour commenter

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



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