sql >> Database teknologi >  >> RDS >> Mysql

MySQL Bestil før gruppe efter

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.



  1. Måder at vide, hvordan man håndterer databasekorruption i SQL Server

  2. Oracle ORA-12154 fejl på lokal IIS, men ikke med Visual Studio Development Server

  3. jsonb vs jsonb[] for flere adresser til en kunde

  4. Automatisk failover af Moodle PostgreSQL-databasen