将2个SQL查询合并为一个

时间:2012-07-08 20:26:39

标签: mysql 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

我还有一个查询向我展示了一篇文章的追随者

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

我怎样才能进行这一个查询,因此我不必调用2个查询,因为我觉得它没用,可能需要更多时间才能加载?

2 个答案:

答案 0 :(得分: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.id更改为aa.id > bb.id以获得50位第一批粉丝。

ORDER BY date更改为ORDER BY date DESC以获取50篇最新文章。

更改LIMIT n,其中n表示您要检索的文章数量。

更改HAVING COUNT(1) < n,其中n表示您要为每篇文章检索的关注者数量。

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

答案 1 :(得分: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