navigation entre catégories

WRInaute occasionnel
Voilà

imaginons une table dans laquelle on stocke les différentes catégories.
Chaque catégorie a un nom, un id et l'id de sa catégorie parente.
Comment peut-on faire pour afficher en haute de la page en cours une série de liens présentant toutes les catégories parentes de la catégorie affichée, sans avoir à faire une requete pour chaque recherche de parent :

Automobile >> Renault >> Twingo

Faut-il adapter la table (ajout d'un autre champ) ou y a-t-il una autre astuce ?

Merci !!!!
 
WRInaute occasionnel
Il faut que tu fasse une requete avec INNER JOIN, c'est à dire une requete sur deux tables ou tu fais correspondre un champ id du parent avec le champ id-parent de la table fille, ainsi tu remonte les infos autant de fois que nécessaire en fait pour bien faire il faut créer des clés sur les champs d'id qui auront une relation 1 à plusieurs, suis-je clair ? (http://www.w3schools.com/sql/sql_join.asp [En])
 
WRInaute occasionnel
si je comprends bien il faut faire 2 tables :

CATEGORIE :

ID_CAT
NOM
...

LIENS_CATEGORIE :

ID_CAT
ID_CAT_FILLE

et ensuite une jointure entre ces tables.

Mais comme ça je vais devoir faire une requete à chaque fois que je veux remonter d'un niveau de catégorie non ?
 
WRInaute occasionnel
Oui mais tu peux faire les requetes en "cascades" donc pour ton fil d'ariane faire simplement une requete "générale" avec autant de jointures que nécessaire... à valider tout de même pour pas stresser le serveur
 
WRInaute occasionnel
Merci pour ces eclaircissements mamat-!

... et en admettant que j'ai jusqu'à une dizaine de niveaux de catégories, vaut-il mieux que je lance 10 fois une requete qui va me chercher la catégorie parente pour remonter jusqu'à la racine ou 1 requête qui va alors faire 10 jointures.... ?
 
WRInaute passionné
yann214 a dit:
Merci pour ces eclaircissements mamat-!

... et en admettant que j'ai jusqu'à une dizaine de niveaux de catégories, vaut-il mieux que je lance 10 fois une requete qui va me chercher la catégorie parente pour remonter jusqu'à la racine ou 1 requête qui va alors faire 10 jointures.... ?

Passe par une fonction récursive. Ne vas pas faire 10 jointures.
Met ton fil d'ariane en cache, histoire de ne pas surcharger ton serveur.
 
WRInaute occasionnel
Oui fonction récursive, mais si ta version de SQL te le permet, je ne sais plus la quelle il faut..
 
WRInaute passionné
mamat- a dit:
Oui fonction récursive, mais si ta version de SQL te le permet, je ne sais plus la quelle il faut..

Je ne parlais pas en SQL, mais dans le langage hôte.
Il n'existe pas de version récursive SQL ( dans le standard SQL ).

La proposition "RECURSIVE UNION" a été abandonné en 1996.

Certains outils propriétaire ont implémenté des fonctionalités supplémentaires :
ORACLE : START WITH et CONNECT BY PRIOR
DB2 : WITH

Il me semble que la dernière version de MS-SQL Server a aussi implémenté des fonctions récursives. Il faudrait que je vérifie.

Mais encore une fois, toutes ces fonctions sont propriétaires et ne sont pas dans la norme SQL
 
WRInaute passionné
Aprés vérification :
le T-SQL de Ms-SQL Server 2005 a bien intégré des fonctions récursives avec gestion du niveau.
 
WRInaute occasionnel
le système de fonction récursive me plait mieux effectivement.

Peux-tu me donner plus de détails sur la manière de faire et de gérer le cache.

Admettons qu'un utilisateur arrive via un moteur de recherche sur une page quelconque de l'annuaire, il faut que je construise le fil d'ariane en en-tête de page.
Je dois donc lancer ma fonction récursive qui va lancer une requête pour chaque niveau de catégorie jusqu'à arriver à la racine.

Commnet intégrer un cache à tout ça pour ne pas surcharger le serveur ?

Merci encore pour toutes ces infos !!!
 
WRInaute passionné
WRInaute occasionnel
merci Spidetra,

Je vais jeter un oeil à tout ça.

Après une première lecture, j'en déduis que tu me conseilles d'utiliser la class PEAR pour placer en cache un bloc qui contiendrait ma zone html "fil d'ariane" ?

Si le cache du bloc n'existe pas : je lance ma procedure recursive.
S'il existe, j'affiche le cache.

Je commence à mieux comprendre =)

Merci !!!
 
WRInaute passionné
Tu as compris le principe.
Ensuite tu utilises PEAR ou un autre système de cache PHP existant.
PEAR a l'avantage d'être simple.
 
WRInaute occasionnel
Merci !
je vais mettre tout ça en pratique !

Dois-je insatller obligatoirement Pear pour pouvoir utiliser Cache Lite ?
 
WRInaute occasionnel
ah zut ça devient un peu plus compliqué alors... sur un mutualisé.
Surtout que c'est pas juste des scripts php à placer dans un répertoire....

qq'un a déjà installé ça sur un mutualisé ovh ?
 
WRInaute passionné
yann214 a dit:
ah zut ça devient un peu plus compliqué alors... sur un mutualisé.
Surtout que c'est pas juste des scripts php à placer dans un répertoire....

qq'un a déjà installé ça sur un mutualisé ovh ?

Chez OVH, PEAR est installé.
Pour Cache_Lite, je sais plus. Mais en tout cas je l'ai utilisé sur un mutualisé sans pb.

Je m'étais fait un répertoire PEAR dans lequel je mettais les modules qui m'intéressaient
 
Discussions similaires
Haut