从mysql查询中的表中获取前3名评论员
Posted
技术标签:
【中文标题】从mysql查询中的表中获取前3名评论员【英文标题】:Get the top 3 commentator from a table in mysql query 【发布时间】:2012-07-15 05:41:39 【问题描述】:我有 3 张桌子
comments(id,question_id, user_Id) // here the user_id is of the user who has asked the question
questions(id,q_desc, user_id)
users(id, name, rank)
用户可以提出问题,也可以对问题发表评论。
我需要一个报告,我希望在其中显示每个问题,最多有 3 个排名靠前的用户发表评论,但提出问题的用户不应该出现在该特定问题的报告中,但他也有权对他的问题发表评论。
已编辑:::
Select * from comments inner join users(comments.user_id=u.id) group by question_id order by user.rank desc
【问题讨论】:
@Nerd-Herd:那时我没有添加我的查询,因为我在开始这个问题时遇到了问题,因为问题在于每个问题排名前 3 的用户 【参考方案1】:虽然很乱,但很有效:
SELECT
a.question_id, a.user_id, a.name, a.rank
FROM
(
SELECT a.*, b.name, b.rank
FROM
(
SELECT DISTINCT b.question_id, b.user_id
FROM questions a
INNER JOIN comments b ON a.id = b.question_id AND a.user_id <> b.user_id
) a
INNER JOIN users b ON a.user_id = b.id
) a
INNER JOIN
(
SELECT a.question_id, b.rank
FROM
(
SELECT DISTINCT b.question_id, b.user_id
FROM questions a
INNER JOIN comments b ON a.id = b.question_id AND a.user_id <> b.user_id
) a
INNER JOIN users b ON a.user_id = b.id
) b ON a.question_id = b.question_id AND a.rank <= b.rank
GROUP BY
a.question_id, a.user_id, a.name, a.rank
HAVING
COUNT(1) <= 3
ORDER BY
a.question_id, a.rank DESC
编辑:这会产生相同的结果并且更简洁:
SELECT a.*
FROM
(
SELECT DISTINCT a.question_id, a.user_id, b.name, b.rank
FROM comments a
INNER JOIN users b ON a.user_id = b.id
) a
INNER JOIN
questions b ON a.question_id = b.id AND a.user_id <> b.user_id
INNER JOIN
(
SELECT DISTINCT a.question_id, a.user_id, b.rank
FROM comments a
INNER JOIN users b ON a.user_id = b.id
) c ON b.id = c.question_id AND a.rank <= c.rank
GROUP BY
a.question_id, a.user_id, a.name, a.rank
HAVING
COUNT(1) <= 3
ORDER BY
a.question_id, a.rank DESC;
这些解决方案还考虑了在同一问题中发表了多个评论的用户。
在SQLFiddle查看这两种解决方案的实际应用
【讨论】:
优秀的赞恩,我接受你的回答,你能帮我解决层次问题***.com/questions/11064913/… @SashiKant,谢谢!顺便说一句,如果您有兴趣,我只是制作了一个更简洁的解决方案版本。请参阅修改后的答案。以上是关于从mysql查询中的表中获取前3名评论员的主要内容,如果未能解决你的问题,请参考以下文章
需要 Python 3.7 中的 Mysql 查询以从具有列 (table_no, is_new) 的表中选择记录
MySQL查询从具有1000万行的表中获取每个条目的最新记录