Avec mysql, il doit être possible de n'avoir qu'une seule table, mais de la dédoubler en utilisant des alias différentes du genre :Avec une table je crains que ce ne soit pas possible. Il t'en faut au moins deux pour faire les jointures et afficher comme tu l'espères.
Code : Tout sélectionner
select t1.libelle, t2.libelle from table t1, table t2 where t1.id = t2.idParent
$sql = "SELECT categorie_id,categorie_nom FROM table_menu WHERE categorie_profondeur='0' ORDER BY categorie_nom ASC";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
// On affiche ce menu père
echo $row['categorie_nom']."<br />";
// On affiche les éventuels menus fils qu'il y a
$sql2 = "SELECT categorie_nom FROM table_menu WHERE categorie_profondeur='".$row['categorie_id']."' ORDER BY categorie_nom ASC";
$result2 = mysql_query($sql2);
while($row2 = mysql_fetch_array($result2))
{
echo $row2['categorie_nom']."<br />";
}
}
Eeeuh voilà, à peu de choses près ça devrait marcher. Par contre je ne suis pas assez calé en php/mysql pour savoir quelle solution serait la plus efficace : 2 tables croisées ou une seule avec requêtes imbriquées.
$req = mysql_query("select t1.libelle as cat, t2.libelle as sousCat from table t1, table t2 where t1.id = t2.idParent") or die(mysql_error());
$cat ="";
while($resultat = mysql_fetch_array($req)){
if ($cat != $resultat['cat']){
print $resultat['cat'];
$cat = $resultat['cat'];
}
print $resultat['sousCat'];
}
Quand gêrer l'apparition des sous-catégorie en fonction, de clique, il vaudrait vraiement mieux, gêrer ça en CSS et/ou JavaScript, pour éviter de surcharger un peu plus le serveur de base de donnée.
Code : Tout sélectionner
select t1.libelle as cat, t2.libelle as sousCat, t3.libelle as sousSousCat from table t1, table t2, table t3 where t1.id = t2.idParent and t2.id = t3.idParent