0

定義済みのキーワードで検索できるようにしたいアイテム データベースがあります。

私が今持っているのは、次のような3つのテーブルです。

Items_tbl:

item_idx、アイテム (UNIQUE)、説明など

Keyword_tbl:

kw_idx、kw (一意)、kw_description

Cross_tbl:

item_idx、kw_idx。

「and」検索をしたいのですが... のように... 「aquamarine」、「blue」、および「green」というキーワードを持つすべての (明確な) アイテムをください。つまり、「アクアマリン」と「青」と「緑」...

「または」検索の検索は非常に簡単ですが、このような「および」検索を行うのは困惑しています...この例では。「青」と「緑」の両方を含むアイテムを検索したいが、「緑」だけのアイテムは検索したくない。

4

2 に答える 2

0
SELECT   Items_tbl.*
FROM     Items_tbl
    JOIN Cross_tbl   USING (item_idx)
    JOIN Keyword_tbl USING (kw_idx)
WHERE    kw_description IN ('aquamarine','blue','green')
GROUP BY item_idx
HAVING   COUNT(*) = 3

これは、キーワードが項目に関連付けられるのは最大で 1 回だけであると想定しています (つまり、inのUNIQUE制約)。そうでない場合は、効率の低いに置き換えるか、同じキーワードが に複数回出現する可能性がある(つまり、列に制約がない) 場合はさらに効率の悪い に置き換える必要があります。(item_idx, kw_idx)Cross_tblCOUNT(*)COUNT(DISTINCT kw_idx)COUNT(DISTINCT kw_description)Keyword_tblUNIQUEkw_description

于 2013-05-21T12:07:59.950 に答える