【问题标题】:Ordering mysql result by number of regexp matches按正则表达式匹配数排序 mysql 结果
【发布时间】:2013-12-26 09:15:11
【问题描述】:

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

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

我想以这样一种方式对结果进行排序,即最匹配的标题(所有三个单词)以及最相关的标题被列在第一位。在这种情况下这是否可能?如果可以,我将如何处理?

谢谢

【问题讨论】:

  • SELECT id,title FROM post ORDER BY FIELD(color,'green','blue','red')

标签: mysql regex


【解决方案1】:

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

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 比正则表达式快一点,但如果您的模式更复杂,那么您可以随时将其替换回来。

【讨论】:

猜你喜欢
  • 2022-12-09
  • 2022-12-11
  • 2016-11-10
  • 1970-01-01
  • 2012-10-08
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 2016-11-07
相关资源
最近更新 更多