MySql:按空格分隔的值列中的匹配数对结果进行排序

时间:2010-08-26 18:15:40

标签: sql mysql

我有一个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%'

但是只选择共享一个或多个单词的结果。如何跟踪有多少匹配,并按照这些匹配结果?

2 个答案:

答案 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