[英]Select latest posts with their n latest comments
這是一個常見的每組最多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個,並以某種方式找到每個帖子的總評論數以顯示分頁。
這是一個小提琴... sqlfiddle.com/#!2/e92a6/1
預期結果:
post8
post7
評論-7
評論-6
評論-5
{}頁
post6
...
我知道這很困難,那么您會建議我做什么(最有效的方式)?
謝謝。
更快的解決方案使用變量-但我是老派...
該查詢為您提供每個發件人的最新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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.