[mysql]首先,列出最匹配 id 其他版本

标签: sql MySQL
发布时间: 2017/1/9 22:12:25
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

目前正在开发"不同"风格的搜索。我有以下表

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

正如你可以看到以上,苹果和葡萄出现在以下 id

 1, 4, 6

我需要的查询的壳给我最匹配 Id 第一,随后其他

 1, 4, 6, 2, 7, 5

解决方法 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 和关键字每一行。

赞助商