我有一个MySQL数据库表,其中包含一个带有空格分隔值的“word”列。例如:
one two three four five
因此,鉴于上述记录,我想找到包含一个或多个空格分隔值的其他记录,并按大多数相关匹配对结果进行排序。我怎样才能实现这个目标?
例如:
one two six seven eight
three nine ten eight seven
one two three six seven
one two three four ten
six seven eight nine ten
我希望返回以下内容:
one two three four ten --4 matching values
one two three six seven --3 matching values
one two six seven eight --2 matching values
three nine ten eight seven --1 matching value
这是我目前使用的查询:
SELECT * from MyTable WHERE words like '%one%' OR words like '%two%' OR words like '%three%' OR words like '%four%' OR words like '%five%'
但是只选择共享一个或多个单词的结果。如何跟踪有多少匹配,并按照这些匹配结果?
答案 0 :(得分:0)
您可以查看实施全文搜索,例如the type described here。
虽然另一个非常混乱的方法是使用like语句然后用正则表达式解析结果集以获得每个记录的匹配数,因此允许您基于数字或匹配来实现排名。
享受!
答案 1 :(得分:0)
我认为没有简单而优雅的方法来实现这一目标。我的解决方案是:
SELECT MyTable.* FROM MyTable JOIN
(SELECT row_id, COUNT(*) AS count
FROM
(
SELECT row_id from MyTable WHERE words like '%one%'
UNION
SELECT row_id from MyTable WHERE words like '%two%'
)
GROUP BY row_id
) AS count_result
ON MyTable.row_id=count_result.row_id
ORDER BY count_result.count DESC