【问题标题】:Mysql query - Search only the latest x rowsMysql查询 - 仅搜索最新的x行
【发布时间】:2013-05-22 12:07:41
【问题描述】:

这是我在这里的第一个问题,所以我希望我做得对。我有以下 SQL 查询:

SELECT *, 
  MATCH(name, descr) AGAINST ('$q') AS score 
FROM songs 
WHERE MATCH (name, descr) AGAINST('$q') 
ORDER BY score DESC

您可能知道,如果描述或名称中存在匹配项,此查询将从songs 表的每一行中选择所有内容。我想要做的是将查询限制为仅搜索例如最新的 10k 行。我还有一个主键id

【问题讨论】:

  • 可以肯定的是,您的真正意思是 search,而不是 return 最后 10k 行,对吗?
  • 你试过在ORDER BY score DESC之后添加LIMIT 10000吗?

标签: mysql


【解决方案1】:

您将需要一个嵌套查询。试试这个:

SELECT temp.*, 
  MATCH(name, descr) AGAINST ('$q') AS score
FROM (
    SELECT *
    FROM songs 
    ORDER BY id DESC
    LIMIT 10000
    ) temp
WHERE MATCH (name, descr) AGAINST('$q') 
ORDER BY score DESC

【讨论】:

  • 这正是我想要的,非常感谢。现在我收到这个错误:“使用的表类型不支持 FULLTEXT 索引”,虽然表引擎是 MISAM。对此有什么想法吗?
  • 嗯,你确定那张桌子也是 MyISAM 吗?
【解决方案2】:

你可以ORDER BY score ASC(而不是DESC)加上LIMIT 10000,最后颠倒结果的顺序:

SELECT * FROM (
  SELECT *, 
    MATCH(name, descr) AGAINST ('$q') AS score 
  FROM songs 
  WHERE MATCH (name, descr) AGAINST('$q') 
  ORDER BY score ASC
  LIMIT 10000
) ORDER BY score DESC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2017-05-16
    • 2012-11-12
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多