2014-04-23 2 views
1

J'ai 2 tables nommé « main_cat » et « sub_cat »Comment trouver uniquement une partie exacte d'une chaîne dans mysql?

Les sous-catégories peuvent appartenir à plus d'une catégorie principale, stockée dans un VARCHAR appelé « cat_id » simplement séparés par des virgules « 1, 8, 17 », etc.

Comment puis-je sélectionner une sous-catégorie en fonction d'une catégorie principale à laquelle elle appartient?

J'ai essayé

SELECT * FROM sub_cat WHERE cat_id LIKE '%{$catId}%' 

Mais avec un catId $ de "1" qui reviendrait aussi "10, 21, 14", etc.

Toutes les autres variations de LIKE j'essaie de ne travaille pas .

Merci

Répondre

1

Vous pouvez utiliser FIND_IN_SET, mais si possible que vous pouvez modifier votre schéma puis le normaliser, ne stockez pas les ID séparés par des virgules.

SELECT * FROM sub_cat 
WHERE FIND_IN_SET('{$catId}',cat_id) 

Une suggestion pour le schéma 1 table pour les catégories (id, nom) 1 pour les sous catégories (id, nom) et une table de jonction (id, category_id, sub_category_id) qui se rapporte la sous-catégorie à son parent plusieurs parents .Vous pouvez ensuite utiliser une requête jointe telle que

SELECT s.* 
FROM sub_categories s 
JOIN junction_table j ON(s.id =j.sub_category_id) 
WHERE j.category_id ='{$catId}' 
+0

Comment recommanderiez-vous de stocker des références dans plusieurs catégories? – Muskogeee

+0

@Muskogeee voir ma mise à jour –

+1

Merci, FIND_IN_SET est ce que je cherchais à court terme mais je vais essayer l'autre option. – Muskogeee

0

Si vous voulez une correspondance exacte, ne pas utiliser des jokers :) vous pouvez avoir à traiter avant la liste à l'aide explode() pour le mettre dans un tableau d'abord bien.

Questions connexes