目前正在开发一种“不同”的搜索方式。我有下表
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
答案 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和关键字一行。