1

私のウェブサイトのすべての記事を含む記事テーブルがあります。

デザインは次のようになります。

id | user_id | name | date

各記事をフォローしているすべてのフォロワーを含むフォロワーテーブルもあります

そのデザインは次のようになります。

id | article_id | user_id | date

現在、日付順に並べられた50の記事をもたらすSQLクエリがあります

SELECT id,user_id,name,date
FROM articles
ORDER BY date
LIMIT 50

また、記事のフォロワーのうち 50 人を表示するクエリがもう 1 つあります。

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

役に立たず、読み込みに時間がかかる可能性があるため、2 つのクエリを呼び出す必要がないように、この 1 つのクエリを作成するにはどうすればよいですか?

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 n取得する記事の量を表す場所を変更nします。

HAVING COUNT(1) < n記事ごとに取得するフォロワーの数を表す場所を変更nします。

また、4 つすべてを混ぜて、必要な組み合わせを容易にすることができます。

于 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 に答える