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

标签 mysql regex

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

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/

相关文章:

php - 如何避免对mysql查询进行子查询

mysql - 如何使用mamp将数据库与codeigniter连接

正则表达式:删除不以数字开头的行

regex - 转义正则表达式中的括号

javascript - 正则表达式匹配所有

mysql - 如何提高 JavaFx-MySQL 应用程序的性能

mysql - 添加的联接越多,选择所需的时间就越长

php - 将 mysql 结果转换为具有正确类型的 json

php - Preg 替换直到点,包括那个

javascript - 如何增强 slugify 以处理 Camel Case?