sql - 如何用MATCH(), ROUND() & Subquery写MySQL全文查询?

标签 sql mysql full-text-search

目前,我正在使用这个查询,它可以很好地找到最相关的结果并按“最相关”排在第一位:

  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/

相关文章:

sql - 如何在 FORMSOF Inflectional 全文搜索中获取匹配项的位置?

mysql - 如何处理具有大量读写操作的十亿行表

php - 比较2个表中的2个字段并提取数据

php - 从数据库获取数据时,CodeIgniter 出现 "Undefined variable"错误

MySQL 引用,以避免重复我自己?

elasticsearch - ElasticSearch多字同义词

postgresql - 两个 ts 向量列之间的 ts_rank

mysql - 将 3 个表连接在一起

sql - T-SQL 中的按行最大值

mysql - 将使用子查询的查询重写为使用联接的查询时导致 SQL 错误