php - Mysql:根据 WHERE 子句中的匹配数对结果进行排序?

标签 php mysql sql-order-by where-clause

是否可以根据 WHERE 子句中的匹配数MYSQL 查询的结果进行排序 (DESC), 已被多个 OR 运算符分隔?

我想对以下查询执行此操作:

SELECT column_1, column_2, column_2
FROM tbl_table 
WHERE column_1 LIKE '%$string1%' 
OR column_2 LIKE '%$string2%' 
OR column_3 LIKE '%$string3%'
ORDER BY ... "

最佳答案

您可以这样使用 SUM() 和 GROUP BY:

SELECT column_1, column_2, column_3, 
    SUM(IF(column_1 LIKE '%$string1%', 1, 0)) as S1,
    SUM(IF(column_2 LIKE '%$string2%', 1, 0)) as S2,
    SUM(IF(column_3 LIKE '%$string3%', 1, 0)) as S3
FROM tbl_table
WHERE column_1 LIKE '%$string1%'
    OR column_2 LIKE '%$string2%'
    OR column_3 LIKE '%$string3%'
GROUP BY column_1, column_2, column_3
ORDER BY S1 DESC, S2 DESC, S3 DESC

关于php - Mysql:根据 WHERE 子句中的匹配数对结果进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31924165/

相关文章:

php - 使用 PDO 显示数据库中的数据

php - 在 PHP 文件而不是 HTML 中使用 Google Analytics 全局网站标记

php - polymer 和 PHP

mysql - 与其他行的连接获得相同的结果

mysql - Rails 5 注册期间出现 'nomethod' 错误

php - 使用 php 脚本连接到数据库

php - 如何修复错误 "CDbCommand ... SQLSTATE[42000]: Syntax error or access violation: 1064"

sql - 简单的 MySql - 获取表中的最大数字

mysql - 如何在 MySQL 中以两个表中的三个为一组显示行

php - 在 sql 查询中使用 LIMIT 和 ORDER BY 以及 LEFT JOIN