gpt4 book ai didi

mysql - 选择最新帖子及其 n 个最新评论

转载 作者:行者123 更新时间:2023-11-29 12:33:49 24 4
gpt4 key购买 nike

这是一个常见的每组最大 n 问题,但还有一个额外的问题。我想要的是找到用户最新的 20 个帖子,并为每个帖子加载其最新的 5(或 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;

然后,我将每个主键存储在一个数组中,以便检索这些帖子的评论。

查找帖子的评论:

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 条,并以某种方式找到每个帖子的总评论数,以便显示分页。

这是一个 fiddle ...sqlfiddle.com/#!2/e92a6/1

预期结果:

post8

post7

comment-7

comment-6

comment-5

{pages}

帖子6

...

我知道这会很困难,那么你会建议我做什么(最有效的方法)?

谢谢。

最佳答案

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

此查询为您提供每个发件人的最新 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

现在您可以扩展该想法,为最后 5 篇帖子(针对每个发件人)中的每一篇返回 3 条最新评论(如果有)

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;

关于mysql - 选择最新帖子及其 n 个最新评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27088921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com