首先列出大多数匹配的ID,其他的稍后列出

时间:2014-06-26 03:53:47

标签: mysql sql

目前正在开发一种“不同”的搜索方式。我有下表

id     keywords
1      apple orange mango grapes watermelon
2      apple mango
3      orange
4      orange grapes apple
5      grapes
6      grapes mango apple
7      watermelon apple orange

我的搜索字段是一个文本框,可以提及矿石或更多水果名称,例如

 apple grapes

我需要以下方式获得结果:首先我将在上表中搜索第一个水果(苹果),因此匹配的ID将是

 1, 2, 4, 6, 7

然后我将在上表中搜索第二个水果(葡萄),因此匹配的ID将是

 1, 4, 5, 6

如上所示,苹果和葡萄出现在以下ids中

 1, 4, 6

我需要一个查询,哪个shell首先给我最匹配的ID,然后是其他的

 1, 4, 6, 2, 7, 5

1 个答案:

答案 0 :(得分:1)

如果你在php中为每个单词进行解析,你可以尝试:

select k.*
from table k
order by (find_in_set($keyword1, replace(keywords, ' ', ',')) > 0 +
          find_in_set($keyword2, replace(keywords, ' ', ',')) > 0 +
          find_in_set($keyword3, replace(keywords, ' ', ',')) > 0
         ) desc;

但是,您不应将数据存储在列表中(以空格分隔或以逗号分隔)。相反,您应该有一个联结表,每个id和关键字一行。