1

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

设计看起来像这样:

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

4

2 回答 2

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 nwheren表示您要检索的文章数量。

更改HAVING COUNT(1) < nwheren代表您希望在每篇文章中检索的关注者数量。

您可以将所有四个混合起来,以方便您想要的任何组合。

于 2012-07-08T20:41:54.457 回答
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
于 2012-07-08T20:31:14.370 回答