首頁 >資料庫 >mysql教程 >如何在MySQL中高效檢索每個作者的最新貼文?

如何在MySQL中高效檢索每個作者的最新貼文?

DDD
DDD原創
2024-12-15 20:10:14487瀏覽

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

在MySQL 中檢索每個作者的最新帖子:使用JOIN 而不是Order by Before Group By

當努力檢索每個作者的最新貼文時在資料庫中,作者在MySQL 中的GROUP BY 之前使用ORDER BY子句的初始方法通常會產生不良結果。但是,在分組之前使用子查詢對行進行排序可能是潛在的解決方案。

為什麼在Group 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 的替代方法

檢索每個作者最新帖子的另一種有效方法是利用 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

此查詢涉及兩個步驟:

  1. 子查詢尋找每個作者的最大 post_date 和對應的 post_author。
  2. 主查詢將包含貼文的表格與 post_date 和 post_author上的子查詢結果連接起來,有效地檢索每個帖子的最新帖子

結論

雖然在分組之前使用子查詢對行進行排序可以是檢索每個作者最新帖子的有效解決方案,但它並不是唯一可用的方法。 JOIN 操作提供了一種既高效又產生可靠結果的替代方法。

以上是如何在MySQL中高效檢索每個作者的最新貼文?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn