簡體   English   中英

選擇最新的帖子及其最新評論

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM