php - 根据来自多列的 LIKE 匹配项数量对 SQL 结果进行排序

标签 php mysql sql-order-by sql-like

SELECT id 
FROM table 
WHERE fistname LIKE CONCAT('%',?,'%') 
   OR secondname LIKE CONCAT('%',?,'%') 
   OR middlename LIKE CONCAT('%',?,'%')");

$stmt->bind_param("sss", $first, $second, $middle);

我希望能够对返回的结果进行排序,以便它们按匹配总数的顺序显示。

例如:

  id | firstname |  secondname   |  middlename    
------------------------------------------------    
  1  |  Thomas   | Smith       |   John    
  2  |  Bob      | Smith       |   John

对于 vars $first = "Thomas", $second = "Smith", $middle="John",结果将按顺序 1,2 排序

对于变量 $first = "Bob", $second = "Smith", $middle="Peter",结果将按顺序 2,1 排序

等...

谢谢!

最佳答案

ORDER BY
       CASE WHEN firstname  LIKE CONCAT('%',?,'%') THEN 1 ELSE 0 END +
       CASE WHEN secondname LIKE CONCAT('%',?,'%') THEN 1 ELSE 0 END +
       CASE WHEN middlename LIKE CONCAT('%',?,'%') THEN 1 ELSE 0 END DESC

关于php - 根据来自多列的 LIKE 匹配项数量对 SQL 结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57699074/

相关文章:

mysql - MySQL中如何对多个条件的结果进行排序

php - 一个父行,另一个表中的多个子行。如何将它们全部排成一排?

sql - 在 SQLite 上添加 ORDER BY 需要花费大量时间

javascript - 将 Javascript 对象转换为 PHP 数组

mysql - 获取每个类别 10 条最新记录,甚至有些记录少于 10 条

mysql - SQL (JOIN) - 从一列到两列的两个结果

mysql LIKE 运算符不正确匹配条件

mysql - 使用限制子句连接和排序的表数量进行查询优化

php - 在 Yii 中循环使用事务

javascript - AJAX 未从 PHP 脚本返回预期输出