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
EDIT:
Efter nogle kommentarer har jeg besluttet at tilføje nogle yderligere informationer.
Firmaet jeg arbejder hos bruger også Postgres og især SQL Server. Disse databaser tillader ikke sådanne forespørgsler. Så jeg ved, at der er en anden måde at gøre dette på (jeg skriver en løsning nedenfor). Du skal også vide, hvad du gør, hvis du ikke grupperer efter alle kolonner, der er behandlet i projektionen, eller bruger aggregerede funktioner. Ellers lad det være!
Jeg valgte løsningen ovenfor, fordi det er et specifikt spørgsmål. Tom ønsker at få det seneste indlæg for hver forfatter på et wordpress-websted. Efter min mening er det ubetydeligt for analysen, hvis en forfatter laver mere end et indlæg i sekundet. Wordpress burde endda forbyde det ved dets spam-dobbeltindlæg-detektion. Jeg ved af personlig erfaring, at der er en virkelig betydelig fordel ved at udføre en så beskidt gruppe med MySQL. Men hvis du ved, hvad du gør, så kan du gøre det! Jeg har så beskidte grupper i apps, hvor jeg er fagligt ansvarlig for. Her har jeg tabeller med nogle mio rækker, som skal bruge 5-15 sekunder i stedet for 100++ sekunder.
Kan være nyttig om nogle fordele og ulemper: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
Men hvis her er mere end ét indlæg i sekundet for en forfatter, får du mere end én række og ikke den eneste sidste .
Nu kan du dreje hjulet igen og få posten med det højeste Id
. Selv her er det i hvert fald ikke garanteret, at du virkelig får den sidste.