2010-01-23 4 views
0

J'ai les tableaux suivants:produits interrogeant MySQL à partir d'une table que si elles apparaissent dans certaines catégories tableau

Products: 
    id, name, ... 

Products_in_Categories 
    id, category_id, product_id 

Categories 
    id, name, ... 

J'ai une page d'administration où je veux le laisser chercher des produits par nom, id catalogue etc Et bien sûr par catégorie et nom et ID de catalogue ...

Donc sans la catégorie - c'est vraiment facile. Mais quand je veux que la recherche ne puisse extraire que l'information des produits qui sont liés à la catégorie choisie - je ne peux pas la comprendre. Est-ce que j'utilise d'anciennes méthodes ou est-ce la façon de le stocker? Je sais et ai utilisé sérialiser et désérialiser mais je ne voulais pas l'utiliser ici.

Toute aide sera très appréciée, merci!

+0

quel est le rôle du catalogue? est-ce la même chose que la catégorie? – Eimantas

+0

ce n'est pas pareil, c'est juste un champ de saisie personnalisé par l'utilisateur (varchar). –

+0

J'ai reformaté votre question, j'espère que c'est bon pour vous. –

Répondre

1

Il n'y a rien de mal dans la façon dont vous stockez vos produits, ces trois tables sont la bonne façon de stocker ce genre de relation.

SELECT * 
FROM Categories c 
JOIN Products_in_Categories pic ON (pic.category_id = c.category_id) 
JOIN Products p ON (p.id = pic.product_id) 
WHERE c.name = 'YOUR_CATEGORY_NAME'; 

Remplacez YOUR_CATEGORY_NAME par le nom de la catégorie que vous recherchez. Si vous voulez que l'utilisateur puisse entrer seulement une partie du nom, remplacez WHERE c.name = 'YOUR_CATEGORY_NAME'; par

WHERE c.name LIKE '%CATEGORY_NAME_PART%; 
+0

Merci! ouah! ça a bien marché! Merci beaucoup - je dois étudier ce domaine plus en profondeur. Avez-vous une bonne suggestion pour un livre mysql? –

0
SELECT p.* FROM products as p 
LEFT JOIN Products_in_Cateogries pc ON pc.product_id = p.id, 
LEFT JOIN Categories c ON c.id = pc.categroy_id 
WHERE c.name = 'CATEGORY A' 

vous pouvez aussi ne pas besoin d'avoir une pièce d'identité dans la table Products_in_Categories puisque la combinaison de category_id et product_id est unique.

+0

Merci. Je ne peux pas vraiment comprendre cette requête, mais je vais creuser plus pour ce que vous avez écrit. quand je l'ai utilisé "tel quel" il a dit que j'ai une erreur, ai-je besoin de changer quoi que ce soit en plus de CATEGORIE A? –

Questions connexes