select wp_posts.* from wp_posts
where wp_posts.post_status='publish'and wp_posts.post_type='post'
group by wp_posts.post_author
having wp_posts.post_date = MAX(wp_posts.post_date) /* ONLY THE LAST POST FOR EACH AUTHOR */
order by wp_posts.post_date desc
編集:
いくつかのコメントの後、私はいくつかの追加情報を追加することにしました。
私が働いている会社もPostgres、特にSQLServerを使用しています。このデータベースでは、このようなクエリは許可されていません。だから私はこれを行う他の方法があることを知っています(私は以下に解決策を書きます)。また、プロジェクションで処理されるすべての列でグループ化しない場合、または集計関数を使用しない場合は、何をするかを知っておく必要があります。それ以外の場合はそのままにしてください!
それは特定の質問なので、私は上記の解決策を選びました。トムは、ワードプレスサイトで各著者の最近の投稿を取得したいと考えています。私の考えでは、著者が1秒間に複数の投稿を行う場合、分析は無視できます。 Wordpressは、スパムの二重投稿検出によってそれを禁止する必要があります。個人的な経験から、MySQLを使用してこのような汚いグループを実行すると、パフォーマンスに非常に大きなメリットがあることがわかります。しかし、あなたが何をしているのかを知っていれば、あなたはそれを行うことができます!私は専門的に責任を負っているアプリにそのような汚いグループを持っています。ここに、100++秒ではなく5〜15秒を必要とするmio行を含むテーブルがあります。
一部の長所と短所について役立つ場合があります: http://ftp.nchu.edu.tw/MySQL/tech-resources/articles/debunking-group-by-myths.html
SELECT
wp_posts.*
FROM
wp_posts
JOIN
(
SELECT
g.post_author
MAX(g.post_date) AS post_date
FROM wp_posts as g
WHERE
g.post_status='publish'
AND g.post_type='post'
GROUP BY g.post_author
) as t
ON wp_posts.post_author = t.post_author AND wp_posts.post_date = t.post_date
ORDER BY wp_posts.post_date
ただし、著者の1秒あたりの投稿数が1つを超える場合は、最後の1つだけではなく、1行以上を取得します。 。
これで、ホイールをもう一度回して、Id
が最も高い投稿を取得できます。 。ここでも、少なくとも最後のものを確実に入手できるとは限りません。