0

私は3つのmysqlテーブルを持っています

items
===========
id    title

items_in_categories
============================
id    item_id    category_id

categories
===========
id    title

記載されているすべてのカテゴリに属する​​すべてのアイテムを検索したいと思います。1つのカテゴリではなく、すべてのカテゴリ

たとえば、カテゴリID3および5に属するすべてのアイテムを検索する場合

いいえ。検索できるカテゴリの数は最大20までです。

たとえば、カテゴリID 1、2、3、4、5、6、....および20に属するすべてのアイテムを取得したい

できるだけシンプルな方法で使いたいと思います。

mysqlマニュアルに記載されているように、ANDとネストされたNOTEXISTSを試しました。

何も機能しませんでした。

更新: 私はこれを思いついた。

select * from 
    (select count(*) as counter, item_id from items_in_categories 
        where category_id in (3, 5) group by item_id)getall 
where counter = 2

もっと良い方法はありますか?

4

3 に答える 3

1

私はこれをきれいにして1つのクエリに入れることができることを知っています(個別のクエリとしてではなく、持っている中にカテゴリカウントをネストすることができます...これはもっと読みやすいと思います)が、これが私のショットです:

DECLARE @CategoryCount INT;

SELECT @CategoryCount = COUNT(DISTINCT id) AS CategoryCount
FROM categories
WHERE category_id IN (3,5);

SELECT *
FROM items
WHERE item_id IN 
(
    SELECT item_id
    FROM items_in_categories
    WHERE items_in_categories.category_id IN (3,5)
    GROUP BY item_id
    HAVING COUNT(DISTINCT category_id) = @CategoryCount
)
于 2012-03-27T05:39:57.680 に答える
0

これは、次のような「IN」句を使用して実行できます。

SELECT i.* 
FROM items i
WHERE i.id IN (SELECT item_id from items_in_categories where category_id IN (3,5))
于 2012-03-27T05:33:48.947 に答える
-1
select * from items i , items_in_categories iic, categories c where i.id = iic.item_id and iic.category_id = c.id and c.id in(select * from category where id in(3,5))

上記のクエリから個別のアイテムを取得していない場合は、アイテムのIDにDISTINCTを追加できます。

于 2012-03-27T05:34:29.880 に答える