2009-09-01 29 views
1

私は、現在のサイト貢献者と、投稿された投稿数、最終投稿日などの他の情報とともに、Wordpressブログの「著者」ページを作成しています投稿者による最新投稿の検索

GoogleとWordpress Codexは、MySQLでサブクエリを使用して1つのクエリで必要なすべてのデータを取得するように指示しました。著者ごとに公開された投稿の数を取得するのはすばらしいです。

私が働くことができないのは、著者ごとに最新の投稿の投稿IDを見つけることです。

最新の投稿せずに、作品

現在のクエリ:

SELECT users.ID, (SELECT count(*) FROM posts, users WHERE users.ID = posts.post_author AND posts.post_type = 'post' AND posts.post_status = 'publish') AS post_count FROM users ORDER BY post_count DESC 

各著者( 'latest_post_ID')の最新のポストIDを取得するために私の試み:

SELECT users.ID, (SELECT count(*) FROM posts, users WHERE users.ID = posts.post_author AND posts.post_type = 'post' AND posts.post_status = 'publish') AS post_count, (SELECT posts.ID FROM posts, users WHERE users.ID = posts.post_author AND posts.post_type = 'post' AND posts.post_status = 'publish' ORDER BY posts.post_date DESC LIMIT 1) AS latest_post_ID FROM users ORDER BY post_count DESC 

問題が追加されていますサブクエリ - クエリは、私が意図しているものではなく、任意の著者に一致する公開された投稿を検索します( 'users.ID = posts.post_author')。

SQL-fuを使っている人が、私がMySQLサブクエリを悪用したり濫用している場所を指摘してくれたら、大変感謝しています。

+0

あなたの欠けているリンクは、もともとサブクエリで選択したユーザーIDを結び付けています。 –

答えて

2

これを試してください。

SELECT a.ID, 

(SELECT count(*) 
FROM posts 
WHERE a.ID = posts.post_author 
AND posts.post_type = 'post' 
AND posts.post_status = 'publish') AS post_count, 

(SELECT posts.ID 
FROM posts 
WHERE a.ID = posts.post_author 
AND posts.post_type = 'post' 
AND posts.post_status = 'publish' 
ORDER BY posts.post_date DESC LIMIT 1) AS latest_post_ID 

FROM users As a 
ORDER BY post_count DESC 
+0

これは私のWP 2.8で期待どおりに動作します。 –

+0

ありがとう、これは動作します! – bouchard

0

次のクエリは、MySQLで動作するはずです:

SELECT posts.ID FROM posts, 
(SELECT MAX(posts.post_date) AS max_date, 
posts.post_author AS author 

FROM posts 

WHERE users.ID = posts.post_author 

GROUP BY posts.post_author) AS max_date_table 

WHERE posts.post_date = max_date_table.max_date AND 
posts.post_author = max_date_table.author 
+0

最も外側のSELECT句にpost_countおよびlatest_post_idがありません。 –

3
SELECT u.id, 
     COUNT(*) AS post_count, 
     MAX(p.id) AS latest_post_id 
    FROM POSTS p 
    JOIN USERS u ON u.ID = p.post_author 
    WHERE p.post_type = 'post' 
    AND p.post_status = 'publish' 
GROUP BY u.id 
ORDER BY post_count DESC 

私は、SELECT句の中のSELECTの使用はお勧めしません。彼らは働いている最悪のパフォーマンスを提供します。

+0

投稿IDが必ずしも最新の投稿を示すとは限りません。誰かが新しい記事を作成しても、他の記事が公開された後にのみそれを公開すると、間違った投稿が「最新のもの」になります。代わりにpost_dateからチェックしてください。 –

関連する問題