这是一个常见的最大n-per-group问题,但带有额外的问题。 我想要的是找到用户的最新20个帖子,并为每个帖子加载其最新的5个(或n个)评论。此外,对于分页需求,我需要知道每个帖子还有多少其他评论。是否有可能找到相同的查询? (或者至少与所需的低效率查询)用n条最新评论选择最新帖子
我现在所做的是找到最新的信息及其评论(全部):
寻找的用户最新的帖子:
SELECT up.primkey
, up.sender
, up.comment
, up.date
, up.admin_approved
, u.username
, u.avatar
FROM users_posts up
JOIN users u
ON up.sender=u.userkey
WHERE up.sender=?
AND up.admin_approved=0
ORDER
BY primkey DESC LIMIT $from,$to;
然后,我将每个primkey存储在一个数组中,以便检索这些帖子的评论。
寻找岗位的评论:
SELECT c.primkey,c.post_id, c.sender, c.comment, c.date, u.username, u.avatar
FROM users_posts_comments c
LEFT JOIN users u ON c.sender=u.userkey
WHERE c.post_id IN('.implode(",", $posts_array).') AND c.`admin_approved`=0
ORDER BY c.primkey DESC;
在那之后,我存储到一个新的数组($comments[$post_id][]=comment info)
每个注释,然后我将结果输出。
我想要的是修改第二个查询并将评论限制在最近的5个评论中,同时也想知道每个帖子的总评论数是多少以显示分页。
这里有一个小提琴...... sqlfiddle.com/#!2/e92a6/1
预期结果:
post8
post7
comment- 7
评论-6
评论-5
{}页
post6
...
我知道这将是困难的,所以你会推荐我做(最有效的方式)?
谢谢。
为什么不只是做这一切在一个查询 – Strawberry 2014-11-23 17:06:48
你能提出一些建议吗? – Manolis 2014-11-23 17:31:45
好吧,如果你愿意,可以考虑遵循以下简单的两步式操作:1.如果你还没有这样做,请提供适当的DDL(和/或sqlfiddle),以便我们可以更容易地复制问题。 2.如果您尚未这样做,请提供与步骤1中提供的信息相符的所需结果集。 – Strawberry 2014-11-23 17:41:48