【问题标题】:how to retrieve two records in a table for each record in mysql如何为mysql中的每条记录检索表中的两条记录
【发布时间】:2015-01-26 20:17:00
【问题描述】:

我有一个带有结构的“回复”表。

replyno topicno replydesc replyrank

现在我需要检索每个 topicno(外键)按 replyrank 降序排列的前 2 条记录(意味着前 2 条高排名记录)。

我需要 mysql 中的一个查询,它可以为所有主题编号提取这样的结果集。

请给我优化的查询,可以更快地执行

【问题讨论】:

  • 你尝试了什么?你有什么错误吗?请发布您的代码。

标签: mysql sql select sql-order-by greatest-n-per-group


【解决方案1】:

试试这个:

SELECT replyno, topicno, replydesc, replyrank 
FROM (SELECT replyno, topicno, replydesc, replyrank, 
             IF(@topicno = @topicno:=topicno, @id:=@id+1, @id:=1) AS id 
      FROM reply, (SELECT @id:=1, @topicno:=0) A 
      ORDER BY topicno, replyrank DESC
     ) AS A 
WHERE id <= 2;

【讨论】:

  • 此查询运行良好,但对于 400,000 多条记录的表大小,执行时间超过 13 秒。查询中的任何优化!!!
【解决方案2】:

试试这个查询我认为它会为你工作

 SELECT replyno, topicno FROM reply ORDER BY replyrank DESC LIMIT 2

【讨论】:

    猜你喜欢
    • 2023-02-04
    • 2015-03-11
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    相关资源
    最近更新 更多