我有以下查询。它会选择所有标题包含绿色、蓝色或红色字样的帖子。
SELECT id, title FROM post WHERE title REGEXP '(green|blue|red)'
我想以这样一种方式对结果进行排序,即最匹配(所有三个词)的标题以及最相关的标题列在第一位。这在这种情况下是否可行?如果可行,我将如何处理?
谢谢
最佳答案
您必须拆分正则表达式。针对不同的条件或不同的查询:
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
比正则表达式快一点,但如果你的模式更复杂,那么你总是可以将它替换回来。
关于mysql - 按正则表达式匹配的数量排序 mysql 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20467628/