SORU
28 ŞUBAT 2011, PAZARTESİ


MySQL tarafından Sipariş önce Grup

Her yazar için son mesajı bulmak ve bu yüzden sonuçları grup, her bir yazar için tek tek en son bir yazı istiyorum.

SELECT wp_posts.* FROM wp_posts
        WHERE wp_posts.post_status='publish'
        AND wp_posts.post_type='post'
        GROUP BY wp_posts.post_author           
        ORDER BY wp_posts.post_date DESC

Bu doğru çıktı, ben sadece yazar başına bir yazı olsun, ama gruplandırılmış sonra sonuçları sipariş ve onlar seçilmiş önce gruptur.

CEVAP
28 ŞUBAT 2011, PAZARTESİ


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


DÜZENLEME:

Biraz yorum sonra bazı ek bilgiler eklemeye karar verdim.

At üzerinde çalıştığım şirket de İsim ve özellikle SQL Server kullanır. Bu veritabanları gibi sorguları izin verme. Bunu yapmak için başka bir yol (bir çözümü aşağıda yazıyorum) olduğunu biliyorum. Ayrıca eğer tüm sütunlar projeksiyon tedavi ile grup veya toplama işlevlerini kullanma eğer yaptığın şey bilmen gerekir. Aksi halde öyle olsun!

Özel bir soru olduğu için çözüm yukarıda seçtim. Tom bir wordpress sitedeki her yazar için son yazı olsun istiyorum. Aklımda bir yazar saniyede birden fazla post yaparsan analizi için ihmal edilebilir. Wordpress spam-çift post algılama ile korusun. Performans gerçekten önemli bir avantajı, böyle pis bir grup MySQL ile yaparak olduğunu kişisel deneyimlerinden biliyorum. Ama eğer ne olduğunu biliyorsan, bunu yapabilirsin! Profesyonel sorumlu olduğum uygulamalar böyle kirli gruplar var. Burada 100 saniye yerine 5-15'leri gereken bazı mio satırları içeren bir tablo var.

Bazı artıları ve eksileri hakkında yararlı olabilir: 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

Ama eğer burada daha sonra bir yazı ise bir yazar için saniyede daha sonra bir satır ve tekson bir tane.

Şimdi yeniden tekerleği spin ve yüksek post Id alabilirsiniz. Burada bile en azından gerçekten son olsun garanti edilmez.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 8lacKy

    8lacKy

    30 Mart 2009
  • MaximumPCMag

    MaximumPCMag

    23 Temmuz 2010
  • Richard Laxa

    Richard Laxa

    30 AĞUSTOS 2012