Problême de concept - Comment gerer des catégories ? - PHP - Programmation
Marsh Posté le 12-01-2004 à 09:26:49
les relations récursives existent et à mon avis c'est la seule solution à ton problème
Marsh Posté le 12-01-2004 à 09:57:19
+1
une table avec :
id_cat
id_parent_cat
name
tu vois le genre
Marsh Posté le 12-01-2004 à 11:45:43
Oki ca me parait pas mal. Je pense que c'est possible en mysql. Je vois pas pourquoi ça serait pas le cas. Moi je dis merci les gars, ça m'enléve une poutre de l'oeil
Marsh Posté le 12-01-2004 à 16:46:26
Ouais, j'utilise la méthode de JagStang et un arbre pour la manipulation pour quelques sites, je confirme que c'est une méthode parfaitement viable
Marsh Posté le 12-01-2004 à 17:05:12
j'essaye de faire une fonction pour afficher les categs et sous categs sous forme d'arbre mais sans succés. A vrai dire c'est ma premiere fonction recursive.
Code :
|
Y'a quelqu'un qui comprend mieux que moi sachant que la table c'est :
categorie
-id_categorie
-id_categorie_parent
-nom
Marsh Posté le 12-01-2004 à 17:11:23
Han, pas de requêtes sql dans une fonction récursive !
Tu fais *une* requête pour récupérer le tout *et puis* tu traites le résultat avec une fonction récursive.
Marsh Posté le 12-01-2004 à 17:25:24
Si je peux me permettre un conseil : récupère toute la table triée par id_parent de manière à ne pas avoir à chercher la bonne branche que tu y étais déjà pour l'enregistrement précédent
Marsh Posté le 13-01-2004 à 01:22:43
Ceci t'aidera peut-être :
Code :
|
edit : commentaires
Marsh Posté le 13-01-2004 à 10:35:06
Parfait je m'en sors bien avec ça Je pondais des trucs que je comprenais pas et qui marchait vaguement. Merci beaucoup
Marsh Posté le 13-01-2004 à 10:46:33
C'est presque bon mais j'ai un décalage dans les catégories...
categ1
categ2
categ3
categ4
categ5
Si j'ajoute la categ 5 à la categ 2, la categ 5 est affiché dans la categ 1
Code :
|
Marsh Posté le 13-01-2004 à 11:12:01
Voilà pour ceux que ça intêresse j'ai trouvé et ça marche bien. Faut passer un tableau avec le nom des catégories et leurs id en quatriême argument. Voilou voilou et merci beaucoup
Code :
|
Marsh Posté le 13-01-2004 à 11:53:51
Quelqu'un sait comment je pourrais faire pour recuperer les categories de tout les niveau au dessus d'une sous categorie à partir d'un numéro de sous catégorie ?
-categ1
-categ2
-categ3
*categ4
categ5
*categ6
du genre a partir de categ5 récupéré :
categ3 > categ4 > categ5
Marsh Posté le 13-01-2004 à 12:44:17
Suffit de relancer une boucle/fonction tant que la catégorie parente est supérieure à zero.
Marsh Posté le 13-01-2004 à 13:22:47
Freekill a écrit : Suffit de relancer une boucle/fonction tant que la catégorie parente est supérieure à zero. |
C'est pas un peu lourd ? Parceque ça m'oblige à récupérer toutes catégories pour pouvoir les traiters. Et faudrait que je fasse ca à chaque page chargé en fait (c'est pour un catalogue)
Marsh Posté le 13-01-2004 à 13:54:02
kaiska a écrit : |
Je me demande si tu pourrais pas stocker pour chaque élément une sorte de chemin d'accès sous forme de string, par exemple "categ1/categ5/categ6/" pour une categ 8 qui a pour parent categ6. Ainsi, si tu veux tout les enfants de categ5, il suffit de faire requête qui renvoie que les lignes commencant par "categ1/categ5/". Le problème étant qu'à chaque fois que tu ajoutes ou déplaces une catégorie, faut retrouver tout les parents pour générer cette chaîne ...
Ya peut-être un autre moyen
Edit: En fait non, j'ai mal lu la question, surtout l'exemple donc c'est pas ce que tu veux
Marsh Posté le 13-01-2004 à 14:32:26
hum c'est surement possible mais tout mon systême d'admin pour deplacer les catégories etc est deja en place. La j'arrive à un résultat pas mal.
J'arrive à avoir les categs d'avant. Ca me donne :
categ5 categ1 categ2
mais il faudrait que je puisse inverser se resultat pour afficher un truc du genre
categ2>categ1>categ5
Y'a une fonction pour ça ? surement un explode je pense
Marsh Posté le 13-01-2004 à 17:01:11
kaiska a écrit : hum c'est surement possible mais tout mon systême d'admin pour deplacer les catégories etc est deja en place. La j'arrive à un résultat pas mal. |
Tu as le résultat sous quelle forme ? (c'est quoi la structure des categ dans ton exemple ?)
Marsh Posté le 13-01-2004 à 17:42:18
y avait un modèle de table pour un truc du genre ; "rentable" s'il y a une profondeur de 5 au moins (categ > sous-cat > sous-cat > sous-cat > sous-cat)
par contre je ne sais plus comment ca s'appelle
il s'agissait de numéroter tous les noeuds et toutes les feuilles à la queue leu leu, les feuilles se voyant attribuer un numéro et les noeuds deux.
categ > scat 1 > feuille 1
> feuille 2
> scat 2 > feuille 3
> feuille 4
=> categ : min_id = 0
scat1 : min_id = 1
feuille1: id = 2
feuille2: id = 3
scat1 : max_id = 4
scat2 : min_id = 5
feuille3 : id = 6
feuille4 : id = 7
scat2 : max_id = 8
categ : max_id = 9
si quelqu'un me comprend
Marsh Posté le 13-01-2004 à 17:47:58
Mais si tu devais rajouter une feuille, par exemple dans scat1 ... tu fais comment ? tu renumérotes tout ?
Marsh Posté le 13-01-2004 à 17:49:47
oui c'est pour ca que ce n'est rentable qu'avec une grande profondeur => rapidité de lecture
je crois qu'il y avait aussi une autre condition mais je ne me rappelle plus
pit etre: pas trop de modification dans la table...
Marsh Posté le 13-01-2004 à 20:54:48
Mon projet tutoré de cette année est un ptit site de e-commerce et j'ai été confronté au probleme des sous-catégories.
En fouillant dans mon cote j'ai effectivement une requete sql dans une fonction recursive (pas top...), celle qui me sort les identifiants de toutes les catégories contenues dans celle qu'on passe en argument à la fonction. (ca me permet ensuite de sortir tous les produits contenu dans une catégorie "principale" )
Je garde ce topic sous la main, je m'en reservirai l'été prochain, quand je reprendrai le code de mon site (pour l'instant le but c'est que ca marche pour la demonstration à l'oral et que ca soit pas trop une passoire en sécurité, ensuite je l'améliorerai...)
Marsh Posté le 13-01-2004 à 21:34:42
si le nombre de niveau de catégories est fixé (categorie, sous cat et sous sous cat ici), pourquoi ne pas faire 3 tables avec des simples jointures ?
Marsh Posté le 13-01-2004 à 22:07:44
karamilo a écrit : si le nombre de niveau de catégories est fixé (categorie, sous cat et sous sous cat ici), pourquoi ne pas faire 3 tables avec des simples jointures ? |
Oui mais il n'est pas fixé
(sinon ca serait trop facile )
Marsh Posté le 14-01-2004 à 00:12:42
kaiska a écrit : |
un truc genre array_reverse existe si je me souviens bien
Marsh Posté le 14-01-2004 à 02:01:59
ethernal a écrit : |
C'est aussi ce que j'ai fait
Tu pars de la categorie que tu veux afficher, tu cherche son parent et tu le met dans la table a la suite, puis tu cherche son parent, que tu met dans la table et ainsi de suite...
A la fin tu reverse l'array puis tu genere une belle arborescence
Marsh Posté le 12-01-2004 à 09:20:15
Bonjour,
Je travaille sur un site de vente de produits. J'arrive sur un problême de développement que je n'avais jamais vu et auquel je ne trouve pas de solution, de maniére adapté.
Il s'agit de gerer des categories et des sous catégories. Comment stocker ca dans la base ? Une catégorie peut avoir un nombre indeterminé de sous catégorie. Une sous catégorie peut contenir d'autres sous catégorie. Je ne vois qu'un moyen. Tout stoquer dans la meme table et faire des espêces d'appels récursif sur cette même table. Est ce possible ? Arriverez vous à me comprendre ?