目前,我正在使用这个查询,它可以很好地找到最相关的结果并按“最相关”排在第一位:
SELECT *,
MATCH(text) AGAINST('$keyword') AS score
FROM table_name
WHERE MATCH(text) AGAINST('$keyword')
ORDER BY score DESC
LIMIT $s, 20
产生的结果如下:
text | score | date
---------------------------------------
hotdogs | 13.2345 | Dec 5, 2005
hamburgers | 13.0765 | July 4, 2008
pizza | 8.0987 | Oct 7, 2006
现在我正在尝试重写查询以将分数四舍五入为整数,然后按日期降序对这些分数进行排序。因此,目标是获得如下结果:
text | score | date
---------------------------------------
hamburgers | 13 | July 4, 2008
hotdogs | 13 | Dec 5, 2005
pizza | 3 | Oct 7, 2006
我猜我需要混合使用 ROUND(score)、GROUP BY score,然后是 ORDER BY date DESC——但我不知道如何成功添加它。我尝试了很多子查询,但我无法让它工作。有任何想法吗?预先感谢您的任何指点!
最佳答案
您的日期必须是 DATE 类型,否则您无法按日期排序,这是不可能的。
SELECT
text,
ROUND(MATCH(text) AGAINST('$keyword')) AS score,
date
FROM
table_name
WHERE
MATCH(text) AGAINST('$keyword')
ORDER BY
score DESC,
date DESC
LIMIT 20
OFFSET $s
关于sql - 如何用MATCH(), ROUND() & Subquery写MySQL全文查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2393009/