このような降順で結果を返すクエリがあります。
comment postid name userid tempid
-----------------------------------------------------
c1 199 User1 123321 1
c2 199 User1 123321 2
c3 199 User1 123321 3
c4 199 User1 123321 4
c5 199 User1 123321 5
c6 199 User1 123321 6
c7 198 User1 123321 7
c8 198 User1 123321 8
c9 198 User1 123321 9
c10 197 User1 123321 10
c11 197 User1 123321 11
c12 197 User1 123321 12
c13 197 User1 123321 13
c14 197 User1 123321 13
c15 197 User1 123321 13
c16 197 User1 123321 13
ここで、それぞれの上位 5 つのレコードを選択したいと思いpostid
ます。望ましい結果は次のようになります。
comment postid name userid tempid
-----------------------------------------------------
c1 199 User1 123321 1
c2 199 User1 123321 2
c3 199 User1 123321 3
c4 199 User1 123321 4
c5 199 User1 123321 5
c7 198 User1 123321 7
c8 198 User1 123321 8
c9 198 User1 123321 9
c10 197 User1 123321 10
c11 197 User1 123321 11
c12 197 User1 123321 12
c13 197 User1 123321 13
c14 197 User1 123321 13
これが私のクエリです。
DECLARE rangee INT;
DECLARE uid BIGINT;
SET @rangee = plimitRange * 10;
SET @uid = puserid;
PREPARE STMT FROM
'
SELECT comments.comment,comments.postid,user.name,comments.userid,comments.tempid
FROM
user
INNER JOIN comments ON user.userid=comments.userid
INNER JOIN posts ON posts.postID = comments.postid
WHERE
comments.postid <=
(SELECT MAX(postid) FROM
(
SELECT wall.postid FROM wall,posts WHERE
wall.postid = posts.postid AND posts.userid=?
ORDER BY wall.postid DESC LIMIT 10 OFFSET ?
)sq1
)
AND
comments.postid >=
(SELECT MIN(postid) FROM
(
SELECT wall.postid FROM wall,posts WHERE
wall.postid = posts.postid AND posts.userid=?
ORDER BY wall.postid DESC LIMIT 10 OFFSET ?
)sq2
)
AND
posts.userid = ?
ORDER BY comments.postid DESC,comments.tempid DESC;
';
EXECUTE STMT USING @uid,@rangee,@uid,@rangee,@uid;
DEALLOCATE PREPARE STMT;
どうすればこれを達成できますか?