Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL Подреждане преди групиране по

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 и особено SQL Server. Тези бази данни не позволяват такива заявки. Така че знам, че има друг начин да направя това (пиша решение по-долу). Вие също трябва да знаете какво правите, ако не групирате по всички колони, третирани в проекцията, или не използвате агрегатни функции. Иначе нека бъде!

Избрах решението по-горе, защото това е конкретен въпрос. Том иска да получи скорошната публикация за всеки автор в wordpress сайт. Според мен е пренебрежимо малко за анализа, ако авторът прави повече от една публикация в секунда. Wordpress дори трябва да го забрани чрез откриването на двоен спам. От личен опит знам, че има наистина значителна полза в производителността, когато се прави такава мръсна група с MySQL. Но ако знаете какво правите, тогава можете да го направите! Имам такива мръсни групи в приложения, за които отговарям професионално. Тук имам таблици с няколко mio реда, които се нуждаят от 5-15 секунди вместо 100++ секунди.

Може да е полезно за някои плюсове и минуси: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

Но ако тук има повече от една публикация в секунда за автор, ще получите повече от един ред, а не единственият последен .

Сега можете отново да завъртите колелото и да получите публикацията с най-висок Id . Дори тук поне не е гарантирано, че наистина ще получите последния.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Мога ли да създам база данни, използвайки PDO в PHP?

  2. Как да намерите и замените текст в MySQL база данни с помощта на SQL

  3. Как работи функцията LCASE() в MySQL

  4. Как да създадете нов потребител и да предоставите разрешения в MySQL

  5. Как да върнете позицията на елемент от списък в MySQL