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

我现在拥有的是三个这样的表:

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/

10-15 11:26