2014-11-23 81 views
0

这是一个常见的最大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

...

我知道这将是困难的,所以你会推荐我做(最有效的方式)?

谢谢。

+0

为什么不只是做这一切在一个查询 – Strawberry 2014-11-23 17:06:48

+0

你能提出一些建议吗? – Manolis 2014-11-23 17:31:45

+0

好吧,如果你愿意,可以考虑遵循以下简单的两步式操作:1.如果你还没有这样做,请提供适当的DDL(和/或sqlfiddle),以便我们可以更容易地复制问题。 2.如果您尚未这样做,请提供与步骤1中提供的信息相符的所需结果集。 – Strawberry 2014-11-23 17:41:48

回答

1

更快的解决方案使用的变量 - 但我的老同学......

该查询为您提供最新的5个员额为每个发件人...

SELECT x.* ,COUNT(*) 
    FROM users_posts x 
    JOIN users_posts y 
    ON y.sender = x.sender 
    AND y.date >= x.date 
    GROUP 
    BY x.primkey 
HAVING COUNT(*) <= 5 

所以现在你可以扩展这个想法返回3条最新评论(如果有的话)为每个去年5个职位(为每个发件人)

SELECT a.*, upc.* 
    FROM 
     (SELECT x.* 
      FROM users_posts x 
      JOIN users_posts y 
      ON y.sender = x.sender 
      AND y.date >= x.date 
     GROUP 
      BY x.primkey 
     HAVING COUNT(*) <= 5 
    ) a 
    LEFT 
    JOIN users_posts_comments upc 
    ON upc.post_id = a.primkey 
    LEFT 
    JOIN users_posts_comments z 
    ON z.post_id = upc.post_id 
    AND z.date >= upc.date 
    GROUP 
    BY a.sender 
     , a.primkey 
     , upc.primkey 
HAVING COUNT(upc.post_id) <= 3; 
+0

首先感谢您的回复。问题是我想知道每个帖子是否有超过3条评论,以显示“加载更多”链接或分页(用于评论)。 – Manolis 2014-11-24 09:44:21