我有一个项目数据库,我希望能够与预定义的关键字搜索。
我现在有三个这样的表:
Items_tbl:
item_idx, item (UNIQUE), description等
Keyword_tbl:
kw_idx, kw (UNIQUE), kw_description
Cross_tbl:
item_idx kw_idx。
我想做"and"搜索…喜欢……给我每个有"海蓝宝石"、"蓝色"one_answers"绿色"关键字的物品。即。"绿玉","蓝色","绿色"……
搜索"or"是很简单的,但是我很难像这样搜索"and"…在这个示例中,我想找到同时带有"蓝色"one_answers"绿色"的项目,但不是只有"绿色"的项目。
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
假设关键字最多只能与项目关联一次(即Cross_tbl
中(item_idx, kw_idx)
的UNIQUE
约束);如果不是这样,您将不得不用效率较低的COUNT(DISTINCT kw_idx)
替换COUNT(*)
,或者如果相同的关键字可以在Keyword_tbl
中多次出现,则更低效率的COUNT(DISTINCT kw_description)
(即在kw_description
列上没有UNIQUE
约束)。
查询源表中的每个关键字。
select * from YourTable where YourColumn like '%keyword%' and YourColumn like '%foo%';