2012-07-08 73 views
1

我有一個文章表,其中包含我網站的所有文章。將2個SQL查詢合併爲一個

設計看起來是這樣的:

id | user_id | name | date 

我也有一個追隨者表包含遵循每篇文章

這是設計所有的追隨者是這樣的:

id | article_id | user_id | date 

目前,我有一個SQL查詢,它帶給我50篇按日期排序的文章

SELECT id,user_id,name,date 
FROM articles 
ORDER BY date 
LIMIT 50 

我還多了一個查詢,顯示我的文章的追隨者50

SELECT id, article_id, user_id, date 
FROM followers 
WHERE article_id = 5 
LIMIT 50 

我怎樣才能使這個查詢,所以我不必調用2個查詢,因爲我覺得它沒用可能需要更多時間才能加載?

+0

你想每個文章的50個最近的追隨者? – 2012-07-08 20:36:38

+0

@ ZaneBien它可以是任何50個追隨者,但最近50個也可以做到這一點 – fxuser 2012-07-08 20:37:16

回答

4

嘗試這種解決方案:

SELECT a.*, b.* 
FROM 
(
    SELECT * 
    FROM articles 
    ORDER BY date 
    LIMIT 50 
) a 
INNER JOIN 
(
    SELECT aa.* 
    FROM followers aa 
    LEFT JOIN followers bb ON aa.article_id = bb.article_id AND aa.id < bb.id 
    GROUP BY aa.id 
    HAVING COUNT(1) < 50 
) b ON a.id = b.article_id 

這得到了50條最古老的加盟爲每個這些文章的50名最新的追隨者。


它也是非常靈活:

變化aa.id < bb.idaa.id > bb.id拿到50名追隨者。

更改ORDER BY dateORDER BY date DESC獲得50篇最新文章。

更改LIMIT n其中n代表您想檢索的文章數量。

更改HAVING COUNT(1) < n其中n表示您想要爲每篇文章檢索的關注者數量。

你可以混合所有四個,以方便你想要的任何組合。

0
SELECT a.id, a.user_id, a.name, a.date, f.id, f.article_id, f.user_id, f.date 
FROM articles a, followers f 
WHERE f.article_id = 5 
ORDER BY a.date 
LIMIT 50 
+0

如果一篇文章有​​500個追隨者,它會將它們添加到一個具有0,1,2,3,4,5索引的對象中,並在其數據中? – fxuser 2012-07-08 20:32:46