Sous-categorie

Par tikoum, il y a 8 ans


Bonjour,

Voila je rencontre un petit problème avec mon code.
J'aimerai créer des sous categories. Le problème c'est que je ne sais pas comment prendre le problème :

Quelqu'un peut-il m'aider pour m'indquer quel est le principe en terme de codage et en terme de bonne pratique.
Merci d'avance pour votre aide.

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

Entourez votre code pour bien le mettre en forme

Ce que je veux

Décrivez ici ce que vous cherchez à obtenir

Ce que j'obtiens

Décrivez ici vos erreurs ou ce que vous obtenez à la place de ce que vous attendez :(

14 réponses

Balsakup, il y a 8 ans

Une catégorie peut être reliée à une catégorie (parent_id)
Un post est relié à une catégorie (category_id)

Categories
id
name
slug
parent_id

Posts
id
name
...
category_id

tikoum, il y a 8 ans

Merci pour ta réponse balsakup.
Mais ce qui voudrais dire que tu ne peux pas rattacher le post à la sous catégorie. Parce que justement ce que j'aimerai faire, c'est au moment de la création du post, rattacher celui-ci à une catégorie (avec le category_id ds la table post), et à une éventuelle sous catégorie (avec le parent_id dans la table Catégorie) mais je n'y suis pas arrivé. c'est pour cela que j'avais envisagé une deuxième clé étrangère dans la table Post => mais dans ce cas comment rattacher la sous catégorie à une catégorie ?

Balsakup, il y a 8 ans

Dans mon exemple catégories et sous-catégories se trouvent dans le même table.

Exemple:
Catégories

1, 'Catégorie principale', 'categorie-principale', NULL 2, 'Sous-catégorie' , 'sous-categorie', 1

Ici, Sous-catégorie est une sous-catégorie de catégorie principale.
C'est comme ça que je comprend ta demande.

Peut être, toi, tu envisages d'avoir plusieurs catégories associées au post, dans ce cas là, tu t'es mal exprimé

Dans ce cas là, tu as besoin de 3 trables

Posts(id, name, slug, content, created)
Categories(id, name, slug, parent_id)
PostsCategories(post_id, category_id)

La table PostsCategories permettra de lier plusieurs catégories au post

Exemple
Posts

1, 'Premier post', 'premier-post', 'Je suis le contenu', '2017-08-04'

Catégories

1, 'Catégorie principale', 'categorie-principale', NULL 2, 'Sous-catégorie' , 'sous-categorie', 1 3, 'Truc', , 'truc', NULL

PostsCatégories

1, 2 1, 3

Ici, la post sera associé à la catégorie 2 et 3

Je sais pas si j'ai été clair, ça aurait été plus facile à expliquer avec un MLD ^^

tikoum, il y a 8 ans

Non, je n'envisage pas de lier l'article à plusieurs catégories principales et sous-categorie est bien une sous catégorie d'une categorie comme tu l'as indiqué. Pour arriver à cet objectif, et si j'ai bien compris, la table Post devrait ainsi inclure, outre le champ category_id (pour lier le post à une catégorie), un champ parent_id pour lier le Post à une sous-catégorie ?

tikoum, il y a 8 ans

En relisant ton premier post, j'ai compris que parent_id était dans la table categorie. Mais comment tu fais pour faire la jointure entre la catégorie et la sous catégorie "parent_id" à l'intérieur d'une même table ?

Jinou, il y a 8 ans

Si parent_id = NULL => C'est une Categorie
Si parent_id = 2 => C'est une Sous catégorie de la catégorie ayant pour ID 2

Et avec ce système, tu peux faire des sous catégorie, des sous sous catégories, des sous sous sous catégorie ( et j'arrete là c'est trop long :p )

tikoum, il y a 8 ans

Ok, je vais etudier tout cela ce soir. Merci à vous 2.

tikoum, il y a 8 ans

Bonjour,

J'ai réfléchi au problème mais j'avoue être un plutôt dépassé techniquement (je suis débutant et la programmation n'est pas mon métier). J'ai compris que :

  • si parent_id était null => il s'agissait d'une catégorie principale ;
  • si parent_id avait une valeur, il s'agissait de la sous-catégorie d'une catégorie principale dont l'id a la même valeur.
  • categories et sous catégorie sont dans la même table.

J'ai créé un controlleur NativesController (pour créer les sous catégories) et j'y ai ajouté un type dans la table pour les identifier. Par contre, je ne vois pas du tout comment, dans une fonction, faire une jointure dans une même table pour les deux éléments (l'id de la catégorie et le parent id de la sous catégorie).

Je poste ci-après mon début de code

Je pense que j'ai écrit n'importe quoi, je revois mon code demain.

Merci d'avance pour votre aide.

Jinou, il y a 8 ans

Tu n'as pas besoin de faire jointure, en principe elle est déjà faite.
T'as juste à faire des conditions sql (ou/et php) pour dire que tu veux les catégorie ou les sous catégorie ou les deux.

tikoum, il y a 8 ans

Pouvez vous me dire svp si, avec la première méthode décrite par balsakup, c'est à dire une table commune pour catégorie et parent_id on peut avoir plusieurs sous catégories rattachées à une catégorie principale. Vraiment je galère. Merci pour votre aide.

Jinou, il y a 8 ans

Roh lala tu le fais exprès ?

| Table Catégorie | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - id | name | sous catégorie 1 | vetement | NULL 2 | chaussure | NULL 3 | chausson | 2 4 | T-shirt | 1 5 | chaussette | 3

Alors ici, nous avons 2 catégories : Vetement et chaussure.
Ainsi que 2 sous catégorie : Chausson et T shirt.
Chausson est une sous catégorie de chaussure et Tshirt de vetement.

Et petit bonus, chaussette est une sous catégorie de chausson.

Voilà Monsieur :)

tikoum, il y a 8 ans

Pas du tout exprès. ça fait 4 js que je me prends la tête avec ça (je te l'ai dit l'informatique n'est pas mon métier). Donc une categorie peut avoir plusieurs sous catégories (relis bien mes messages).
En reprenant ton exemple, j'ajoute lacets qui sera une deuxième sous catégorie de chaussures

id | name | sous catégorie 1 | vetement | NULL 2 | chaussure | NULL 3 | chausson | 2 4 | T-shirt | 1 5 | chaussette | 3 6 | lacets | 2

Je bloquais car je croyais que la catégorie et la sous catégorie avait obligatoirement le même id.
Bon maintenant , il faut que je contruise la requête. J'en ai pas terminé, mais si c'est bien ça, j'aurais au moins compris le principe.

fital, il y a 8 ans

Il faut bien te dire que l'id est unique et propre à chaque enregistrement. Tu as en effet compris le principe.

tikoum, il y a 8 ans

Merci fital. dès que j'aurais un moment, je vais travailler sur la requête