Aller au contenu

Requête(s) MySQL pour créer un menu


Sujets conseillés

Posté

Bonjour,

Je galère complètement avec MySQL que je ne connais presque pas.

Je cherche à générer un menu de ce style :

<p>Rubrique 1</p>
<ul>
<li>Article 1</li>
<li>Article 2</li>
<li>Article 3</li>
</ul>
<p>Rubrique 2</p>
<ul>
<li>Article 1</li>
<li>Article 2</li>
<li>Article 3</li>
</ul>

J'ai deux bases :

- une base 'rubrique' avec comme champs : id et nom

- une base 'articles' avec comme champs : id, idrubrique, nom, contenu

Et je voudrais donc lister chaque catégorie avec chaque article qui est dedans mais je n'y arrive pas :S

Pouvez vous m'aider svp ?

Comment faire ?

Merci beaucoup !

Posté

Salut.. J'avais tapé un long message, mais ma méthode me satisfaisait pas :/ ! Elle avait le mérite de n'avoir qu'une requête, mais le bidouillage PHP était embêtant lol...

Bon, la méthode la plus simple :

$req1 = "SELECT id, nom FROM rubrique";
$resultat1 = mysql_query($req1);

while($donnees = mysql_fetch_array($resultat1)
{
extract($donnees);
echo "<p>$id. $nom</p><ul>";

$req 2 = "SELECT  id, nom FROM articles WHERE idrubrique='$id'";
$resultat2 = mysql_query($req2);
while($donnees2 = mysql_fetch_array($resultat2)
{
extract($donnees2);
echo "<li>$nom</li>";
}
echo "</ul>";
}

Le problème de ça, c'est qu'il y a plusieurs requêtes SQL... :/ Possibilité d'améliorer, mais bon c'est le moins trafiqué à mon goût :D

Posté

Salut !

Merci bcp mais créer une requete par rubrique ce n'est pas un peu génant ?

Ca va me bouffer pas mal de ressources non ?

Posté

Tu as bcp de rubriques ? L'autre méthode c'est de tout prendre en un seul coup, et de faire des tableaux...

$req="SELECT a.id, a.nom, a.contenu, b.id AS idrub, b.nom AS nomrub FROM articles a, rubrique b WHERE a.idrubrique=b.id";
$resultat1 = mysql_query($req1);

while($donnees = mysql_fetch_array($resultat1)
{
extract($ligne);
$liste[$idrub][$id]=$nom;
$liste[$idrub]=$nomrub;
}

foreach($liste AS $idrub)
{
echo "<p>$nom</p><ul>";
foreach($idrub AS $idart=>$nom)
{
echo "<li>$nom</li>";
}
echo "</ul>
}

J'ai fait ça sans tester, donc je ne garantis pas que ça marche bien, surtout que les imbrications de tableaux et de foreach sont pas faciles à réussir du premier coup !

Mais tu n'as plus qu'une seule requête en tout cas :D

Posté

Merci beaucoup c'est très sympa. je vais tester tout ça... et p-e passer à un CMS !

Quand on ne connait pas mieux vaut utiliser un bon outil que de tout mal faire.

Posté

Bonjour,

Pour la requête, il vaut mieux utiliser les jointures internes/externes afin que les requêtes soient optimiser du genre :

SELECT a.id, a.nom, a.contenu, b.id AS idrub, b.nom AS nomrub FROM a inner join b on a.id = b.id _rub

En a, on a une colonne 'id' pour le numéro du menu

En b, on a une clé étrangère 'id_rub' correspondant au numéro du menu.

Bonne soirée

Portekoi

Veuillez vous connecter pour commenter

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



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