2014-11-23 72 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