我有一个项目数据库,希望能够使用预定义的关键字进行搜索。
我现在拥有的是三个这样的表:
Items_tbl:
item_idx,项目(唯一),说明等。
关键字:
kw_idx,kw(唯一),kw_description
Cross_tbl:
item_idx,kw_idx。
我想进行“和”搜索...
就像...给我(与众不同)具有关键字“海蓝宝石”,“蓝色”和“绿色”的所有商品。即“海蓝宝石”,“蓝色”和“绿色” ...
搜索“或”搜索非常简单,但是我很困惑地要执行“和”搜索,例如……我要查找同时具有“蓝色”和“绿色”的项目,而不是仅包含“绿色”的项目。
最佳答案
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)
的Cross_tbl
约束);如果不是这种情况,则如果相同的关键字可以在COUNT(*)
中多次出现(即没有COUNT(DISTINCT kw_idx)
约束),则必须用效率较低的COUNT(DISTINCT kw_description)
或效率较低的Keyword_tbl
替换UNIQUE
。在kw_description
列上)。关于mysql - 如何实现关键字搜索?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16669569/