mysql - 在多个表中排序匹配

标签 mysql sql full-text-search

我正在使用这样的查询:

SELECT p.name, d.overview
FROM products AS p 
LEFT JOIN descriptions AS d ON p.DescriptionID = d.ID 
WHERE MATCH (p.name) AGAINST ('ram' IN BOOLEAN MODE) > 0 
OR MATCH (d.overview) AGAINST ('ram' IN BOOLEAN MODE) > 0;

如何对此结果进行相关排序?

我已经尝试过

ORDER BY MATCH (p.name) AGAINST ('ram' IN BOOLEAN MODE) 
OR MATCH (d.overview) AGAINST ('ram' IN BOOLEAN MODE) DESC

但这并没有帮助,因为结果没有根据相关性进行排序。

最佳答案

MATCH ... OR MATCH ...
          ^^

or 使其成为二进制表达式。二进制表达式的计算结果为 true 或 false。所以你要对它们是否匹配进行排序。因为 where 子句已经确保所有行匹配,所以这并不是不添加排序。

尝试按整数表达式排序,例如相关性之和:

ORDER BY
    MATCH (p.name) AGAINST ('ram' IN BOOLEAN MODE) +
    MATCH (d.overview) AGAINST ('ram' IN BOOLEAN MODE) DESC

关于mysql - 在多个表中排序匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7746917/

相关文章:

Python-无法打开库 'libtdsodbc.so' : file not found

mysql - 我希望使用 MySql 优化此查询

mysql 'order by' 问题?

php - 具有价格等级的 Laravel 逻辑

sql - 将外部选择行变量传递给 oracle 中的内部选择

sql - 为什么这个子选择有效?不存在 FROM 子句

PHP 脚本混淆 GEO Lite DB

mysql - 如何使用 liquibase 创建分区表

sql - postgresql-8.4 文本搜索不工作

search - 检查服务器状态时Elasticsearch 503错误