Mysql 检索评论并回复限制

Mysql 检索评论并回复限制,mysql,post,join,comments,limit,Mysql,Post,Join,Comments,Limit,我仍然没有找到正确的方法来做我想要的事情。我试图实现的是一个评论帖子部分,它将显示帖子的最后两个回复 我的桌子结构是这样的 table post --------------------- post_id | comment | post_user | post_date post_reply --------------------- reply_id | parent_id | reply_user | reply_date result -------------------------

我仍然没有找到正确的方法来做我想要的事情。我试图实现的是一个评论帖子部分,它将显示帖子的最后两个回复

我的桌子结构是这样的

table post --------------------- post_id | comment | post_user | post_date post_reply --------------------- reply_id | parent_id | reply_user | reply_date result ---------------------------------------------- post 1 reply post 1 reply post 1 post 2 post 3 reply post 3 reply post 3 桌柱 --------------------- 发布id |评论|发布用户|发布日期 回信 --------------------- 答复|家长|答复|用户|答复|日期 实际上,我可以获取所有帖子和所有回复,但我面临的问题是,我想限制我获取的帖子数量和每个帖子的回复数量,如果没有回复,我还想显示帖子,那么结果应该是这样的

table post --------------------- post_id | comment | post_user | post_date post_reply --------------------- reply_id | parent_id | reply_user | reply_date result ---------------------------------------------- post 1 reply post 1 reply post 1 post 2 post 3 reply post 3 reply post 3 结果 ---------------------------------------------- 职位1 回信1 回信1 职位2 职位3 回帖3 回帖3
当然,我想显示这个,直到我达到10个帖子,2个回复最多附加到每个帖子,当然更少的查询可能。实际上,我对每篇文章都使用了一段时间的查询,即最后2条回复,但每次都使用11条查询,也许你们知道一种更好的方法,可以在更少的查询中进行查询。我假设您的ID列是INT类型。如果不是,您可能必须使用变量来计算每篇文章的回复,如上所述

所以试试这个

SELECT 'POST' AS type, p1.post_id, p1.comment, p1.post_user, p1.post_date, '-' AS reply_id
 FROM post p1
 LIMIT 10

UNION

SELECT 'REPLY' AS type, pr.parent_id AS post_id, 
 '-' AS comment, pr.reply_user AS post_user, pr.reply_date AS post_date, pr.reply_id
 FROM post_reply pr
 JOIN (
     SELECT p2.post_id 
     FROM post p2 
     LIMIT 10
 ) AS tmpPost ON pr.parent_id = tmpPost.post_id
 JOIN (
     SELECT pr.reply_id, COUNT(*) AS row_number
     FROM post_reply pr 
     JOIN post_reply pr2 ON pr.parent_id = pr2.parent_id AND pr.reply_id >= pr2.reply_id
     GROUP BY pr.reply_id
 ) AS tmpPostRN ON tmpPostRN.reply_id = pr.reply_id
 WHERE tmpPostRN.row_number <= 2

ORDER BY post_id ASC, type ASC, reply_id ASC

在第二个查询中,您可以在post_reply表中插入您的comment列,而不是将
“-”作为comment
。您还可以将帖子的回复id设置为您选择的默认值(而不是-1).

非常感谢你回复这篇文章,我会在回家后马上测试。效果很好。我看到的唯一问题是返回我2个回复什么很好,但返回2个第一个回复可以是来自post\u reply的最后2个回复吗?只需将子查询中的
pr.reply\u id>=pr2.reply\u id
替换为
pr.reply\u id