目前是把所有資料取出來,再排序,速度很慢。而且現在要求做分頁。
在不考慮加上評論總數這個欄位的情況下,有沒有更優的方法?原生的sql語句可以直接完成嗎?
目前是把所有資料取出來,再排序,速度很慢。而且現在要求做分頁。
在不考慮加上評論總數這個欄位的情況下,有沒有更優的方法?原生的sql語句可以直接完成嗎?
<code>SELECT posts.id, posts.content, comments.id AS comment_id, comments.body, count(comments.id) FROM posts LEFT JOIN comments --左连接,保证左表posts中没有评论的文章也显示出来 ON posts.id = comments.post_id GROUP BY posts.id --分组,配合count(comments.id)统计到每篇文章的评论数 ORDER BY count(comments.id) DESC, posts.id DESC --按评论数排序,相同则按文章ID排序 LIMIT 2 OFFSET (3-1)*2 --分页,2表示每页显示的文章数量,3表示第3页</code>
在文章表裡面加個字段叫評論數,然後每次有這篇文章新的評論就同時把它加1,然後根據這個字段排序即可
如果只拿文章ID的排序,可以在評論表裡面這樣做:
<code>select post_id from comment group by post_id order by count(1) desc limit 0, 10;</code>
其中post_id
是文章ID,comment
是評論表,這個語句拿到評論數最多的前10篇文章ID