で検索して、この質問、私はそれが皆のために少しより明確になるように、テーブルの名前を変更し、私が達成したいかを説明します:返すオプションを使用して入力フォームがありますMYSQLクエリ明確にするために関係
カテゴリID。 'Product'に 'Category'がある場合は、複数のカテゴリ(またはただ1つ)を持ち、そのカテゴリのすべてがフォームから渡される配列内にあると言うことができる 'Product'を返す/見つけたいと思います。
製品テーブル
ID Title
1 Pizza
2 Ice Cream
Categoriesテーブル
ID Title
1 Baked food
2 Hot food
ProductsCategoriesテーブル
ID ProductId CategoryId
1 1 1
2 1 2
私が合格している場合、[1,2]、すべてのため、IDが1の製品を返す必要がありますクエリProductsCategoriesは要求された配列内にありますが、1または2だけを渡すと、クエリはn結果。
現在、私の作品次のクエリを持っていますが、私は2番目の製品を作成し、最初の製品と同じ区分を持つProductCategoryを作成した場合、何らかの理由で、クエリはnulll返す...
SELECT products.*
FROM products
JOIN products_categories
ON products_categories.product_id= products.id
WHERE products_categories.category_id IN (1, 2)
HAVING COUNT(*) = (select count(*) from products_categories pc
WHERE pc .product_id = products.id)
すべての援助は深く崇拝されています!乾杯!
あなたの質問をクリアするには、単一の商品ではなく、複数のカテゴリのみの商品がほしいですか? – mitkosoft
@mitkosoft、idの[1,2,5,10]でカテゴリを検索すると、すべてのカテゴリがその配列の中にあるすべての製品を取得したいと考えています。つまり、 id 1の商品は、categories_idの1と2のProductsCategoriesのレコードを持ちます。検索配列が[1,2,5,10]の場合、商品は返されますが、category_idの1,2,3のProducsCategories商品8(検索配列に含まれていない)場合は、製品を返さないでください。 私はこのケースがちょっと混乱しているように見えますが、その質問が厳しくない場合は、そのタスクを達成するための他の方法はありません – Cowwando