我有一个文章表,其中包含我网站的所有文章。
设计看起来像这样:
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个查询,因为我觉得它没用,可能需要更多时间才能加载?
答案 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