ホームページ >データベース >mysql チュートリアル >サブクエリを使用せずに MySQL で各作成者の最新の投稿を効率的に取得するにはどうすればよいですか?

サブクエリを使用せずに MySQL で各作成者の最新の投稿を効率的に取得するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-29 02:22:10384ブラウズ

How to Efficiently Get the Latest Post for Each Author in MySQL Without Subqueries?

MySQL Order By Before Group By: 代替アプローチ

MySQL では、グループ化する前に行を順序付けするのは、特に望ましい順序が必要な場合に困難になることがあります。以降のグループ by によって保証されるものではありません。サブクエリの使用は一般的な解決策ですが、常に最適なアプローチであるとは限りません。

ここで示したシナリオの目標は、wp_posts テーブルから各著者の最新の投稿を取得することです。 「現在受け入れられている回答」として説明されているクエリを含む、提供されたクエリは、予期した結果を一貫して提供できません。

サブクエリに頼らずにこの問題に対処する代替ソリューションは、ウィンドウ関数の組み合わせを利用することです。および自己結合:

WITH LatestPostsPerAuthor AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY post_author ORDER BY post_date DESC) AS rn
    FROM wp_posts
    WHERE post_status='publish'
    AND post_type='post'
)
SELECT a.*
FROM LatestPostsPerAuthor a
JOIN LatestPostsPerAuthor b ON a.rn = b.rn AND a.post_author = b.post_author
GROUP BY a.post_author
ORDER BY a.post_date DESC;

このクエリは ROW_NUMBER() ウィンドウ関数を使用して、各投稿内の post_date に基づいて投稿にランキングを割り当てます。著者グループ。自己結合により、ランクが最も高い行 (つまり、最新の投稿) のみがグループ化と順序付けのために保持されるようになります。

このアプローチを使用すると、オーバーヘッドなしで望ましい結果を達成できます。サブクエリを実行し、特定のシナリオに対して正確で一貫した結果を提供します。

以上がサブクエリを使用せずに MySQL で各作成者の最新の投稿を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。