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