如何为mysql中的每条记录检索表中的两条记录

Posted

技术标签:

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

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

replyno topicno replydesc replyrank

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

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

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

【问题讨论】:

你尝试了什么?你有什么错误吗?请发布您的代码。 【参考方案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

【讨论】:

以上是关于如何为mysql中的每条记录检索表中的两条记录的主要内容,如果未能解决你的问题,请参考以下文章

如何用通配符比较同一张表中的两条记录?

删除表中的每条记录时重新启动Id = 1? (角度 + Spring Boot + MySQL)

如何合并 MySQL 表中的两条冗余记录,维护所有 PK/FK 关系?

如何为数组中的每条记录设置一个属性的值

如何从重复记录中检索mysql表中的最新数据

如何为 Oracle 11g 中分层表的每条记录分配父组 ID?