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

MySQL で各著者の最新の投稿を効率的に取得するにはどうすればよいですか?

DDD
リリース: 2024-12-15 20:10:14
オリジナル
487 人が閲覧しました

How to Efficiently Retrieve the Latest Post for Each Author in MySQL?

MySQL で作成者ごとに最新の投稿を取得する: Order by Before Group By の代わりに JOIN を使用する

それぞれの最新の投稿を取得しようとする場合データベースの作成者にとって、MySQL で GROUP BY の前に ORDER BY 句を使用する最初のアプローチでは、望ましくない結果が生じることがよくあります。ただし、グループ化する前にサブクエリを使用して行を並べ替えることは、潜在的な解決策になる可能性があります。

Group By の前に Order by が問題となる理由

クエリの例を考えてみましょう。

SELECT wp_posts.* FROM wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author           
ORDER BY wp_posts.post_date DESC
ログイン後にコピー

このクエリは投稿を投稿者ごとにグループ化し、それぞれの最新の投稿を返すことを目的としていますが、複数の投稿がある場合は失敗する可能性があります。同じ post_date の投稿。このような場合、各作成者グループ内で投稿が返される順序は予測できなくなり、一貫性のない結果が生じます。

サブクエリを使用して問題を解決する

提案されたものこの問題の解決策は、次のようにサブクエリを利用することです:

SELECT wp_posts.* FROM 
(
    SELECT * 
    FROM wp_posts
    ORDER BY wp_posts.post_date DESC
) AS wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author 
ログイン後にコピー

これを使用することでサブクエリでは、投稿はまず post_date の降順で並べられます。結果のサブクエリ テーブルはメイン クエリのソースとして機能し、グループ化する前に最新の投稿が各著者グループの先頭に配置されるようにします。

JOIN を使用した代替アプローチ

著者ごとに最新の投稿を取得するもう 1 つの効果的なアプローチは、JOIN 操作を利用することです。次のクエリは、この方法を示しています。

SELECT p1.* 
FROM wp_posts p1
INNER JOIN
(
    SELECT max(post_date) MaxPostDate, post_author
    FROM wp_posts
    WHERE post_status='publish'
       AND post_type='post'
    GROUP BY post_author
) p2
  ON p1.post_author = p2.post_author
  AND p1.post_date = p2.MaxPostDate
WHERE p1.post_status='publish'
  AND p1.post_type='post'
order by p1.post_date desc
ログイン後にコピー

このクエリには 2 つのステップが含まれます。

  1. サブクエリは、各著者の最大の post_date と対応する post_author を見つけます。
  2. メイン クエリは、投稿を含むテーブルを post_date と post_author の両方のサブクエリ結果と結合し、それぞれの最新の投稿を効果的に取得します。 author.

結論

グループ化する前にサブクエリを使用して行を並べ替えることは、著者ごとの最新の投稿を取得するための効果的な解決策ではありますが、唯一のアプローチが利用可能です。 JOIN 操作は、効率的で信頼性の高い結果を生成する代替方法を提供します。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート