如何实现关键字搜索



我有一个项目数据库,我希望能够与预定义的关键字搜索。

我现在有三个这样的表:

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%';