私は次の表を持っています。
comment postid userid tempid
c1 199 100003052455644 89
c2 193 100003052455644 2
c4 199 100003052455644 82
c5 198 100003052455644 5
c6 199 1097517748 65
ここで、データが最初に列に従って降順で並べ替えられ、次に行が挿入された順序で並べ替えられるようにデータを取得したいと考えました。今、postid
postid が降順で並べ替えられている値を取得すると、このような結果。
comment postid userid tempid
c6 199 1097517748 65
c4 199 100003052455644 69
c1 199 100003052455644 82
c5 198 100003052455644 5
c2 193 100003052455644 2
ご覧のとおり、最後にコメントしたユーザー ID が最初の位置に表示されています。投稿 ID199
では、列を降順で並べ替えることでこの問題に遭遇しましtempid
た。しかし、tempid 列を使用しない方法はありますか?テーブルは非常にすぐにいっぱいになり、自動インクリメント列はすぐにいっぱいになるので、将来この一時的な列を削除する予定です。
現在、正しい結果が得られる次のクエリを使用しています。
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;
comments.tempid DESC
最後の行だけが重要です。句を削除しても同じ結果が得られます。出来ますか?