Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL Pesan sebelum Grup oleh

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:

Setelah beberapa komentar, saya memutuskan untuk menambahkan beberapa informasi tambahan.

Perusahaan tempat saya bekerja juga menggunakan Postgres dan terutama SQL Server. Basis data ini tidak mengizinkan kueri semacam itu. Jadi saya tahu bahwa ada cara lain untuk melakukan ini (saya menulis solusi di bawah). Anda juga harus tahu apa yang Anda lakukan jika Anda tidak mengelompokkan menurut semua kolom yang diperlakukan dalam proyeksi atau menggunakan fungsi agregat. Jika tidak, biarkan saja!

Saya memilih solusi di atas, karena ini adalah pertanyaan spesifik. Tom ingin mendapatkan posting terbaru untuk setiap penulis di situs wordpress. Dalam pikiran saya, analisis dapat diabaikan jika seorang penulis melakukan lebih dari satu posting per detik. Wordpress bahkan harus melarangnya dengan deteksi spam-double-post-nya. Saya tahu dari pengalaman pribadi bahwa ada manfaat yang sangat signifikan dalam kinerja melakukan grup kotor seperti itu dengan MySQL. Tetapi jika Anda tahu apa yang Anda lakukan, maka Anda bisa melakukannya! Saya memiliki grup kotor di aplikasi tempat saya bertanggung jawab secara profesional. Di sini saya memiliki tabel dengan beberapa baris mio yang membutuhkan 5-15 detik, bukan 100++ detik.

Mungkin berguna tentang beberapa pro dan kontra: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

Tetapi jika di sini lebih dari satu posting per detik untuk seorang penulis, Anda akan mendapatkan lebih dari satu baris dan bukan satu-satunya yang terakhir .

Sekarang Anda dapat memutar roda lagi dan mendapatkan pos dengan Id tertinggi . Bahkan di sini setidaknya tidak menjamin bahwa Anda benar-benar mendapatkan yang terakhir.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Penyeimbangan Beban PostgreSQL &Penyempurnaan ProxySQL - ClusterControl 1.5

  2. Aktifkan koneksi MySQL jarak jauh:ERROR 1045 (28000):Akses ditolak untuk pengguna

  3. Cara membuat menu level tak terbatas melalui PHP dan mysql

  4. Rails 3 ActiveRecord:Pesan berdasarkan jumlah asosiasi

  5. Menggunakan Otomatisasi untuk Mempercepat Tes Rilis di Galera Cluster Dengan ClusterControl