如何为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)