我有一个项目数据库,我希望能够使用预定义的关键字进行搜索。
我现在拥有的是这样的三张桌子:
Items_tbl:
item_idx,item(UNIQUE),description等
Keyword_tbl:
kw_idx,kw(UNIQUE),kw_description
Cross_tbl:
item_idx,kw_idx。
我想做“和”搜索... 喜欢...给我(不同的)每个项目都有关键字“海蓝宝石”,“蓝色”和“绿色”。即“海蓝宝石”& “蓝色”& “绿色”......
搜索“或”搜索非常简单,但是我很难做这样的“和”搜索......在这个例子中。我想找到同时包含“蓝色”和“绿色”的商品,而不是只有“绿色”的商品。
答案 0 :(得分: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
这假设关键字最多只能与项目关联一次(即UNIQUE
中(item_idx, kw_idx)
的{{1}}约束;如果不是这种情况,则必须将Cross_tbl
替换为效率较低的COUNT(*)
,如果相同的关键字在{{1}中多次出现,则效率更低COUNT(DISTINCT kw_idx)
}(即COUNT(DISTINCT kw_description)
列上没有Keyword_tbl
约束。)
答案 1 :(得分:0)
查询每个关键字的源表。
select * from YourTable where YourColumn like '%keyword%' and YourColumn like '%foo%';