按正则表达式匹配的数量排序mysql结果

时间:2013-12-09 09:55:30

标签: mysql regex

我有以下查询。它选择标题中包含绿色,蓝色或红色字样的所有帖子。

  

SELECT id,title FROM post WHERE title REGEXP'(green | blue | red)'

我想以这样一种方式对结果进行排序,即首先列出具有最多匹配(所有三个单词)的标题,因此是最相关的标题。在这种情况下这是否可能,如果是这样,我将如何继续呢?

由于

1 个答案:

答案 0 :(得分:0)

您必须拆分正则表达式。不同的条件或不同的查询:

SELECT COUNT(results.username) as count, results.* FROM (
    SELECT * FROM `post` WHERE `title` LIKE "%blue%"
    UNION SELECT * FROM `post` WHERE `title` LIKE "%red%"
    UNION SELECT * FROM `post` WHERE `title` LIKE "%green%"
) as results GROUP BY results.title ORDER BY count DESC;

注意:我使用LIKE代替REGEXP,因为根据您的示例,当您分割不再需要它的条件时。 LIKE比正则表达式快一点,但如果您的模式更复杂,那么您可以随时将其替换回来。