【发布时间】:2019-08-28 19:40:38
【问题描述】:
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 的顺序排序
对于 vars $first = "Bob", $second = "Smith", $middle="Peter",结果将按 2,1 的顺序排序
等等……
谢谢!
【问题讨论】:
-
创建一个FULLTEXT 索引并改用Boolean Full-Text Searches 会更有意义,因为您可以使用
SELECT ... ORDER BY AGAINST ('...' IN BOOLEAN MODE)来获得相关性排序,因为LIKE CONCAT('%',?,'%')永远无法优化。
标签: php mysql sql-order-by sql-like