它的混乱,但它的工作原理:
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;
这些解决方案还可以解决已发布mor的用户而不是同一问题中的一条评论。
在SQLFiddle
@书呆子,追风见行动这两个解决方案:我没加我的查询,然后,因为我有在启动该问题,因为问题出在前三排用户为各问题 – 2012-07-15 05:53:30