繁体   English   中英

将2个SQL查询合并为一个

[英]Combine 2 SQL queries into one

我有一个文章表,其中包含我网站的所有文章。

设计看起来像这样:

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个查询,因为我觉得它没用,可能需要更多时间加载?

尝试此解决方案:

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表示您要为每篇文章检索的关注者数量。

并且您可以混合所有四个以方便您想要的任何组合。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM