2012-04-16 21 views
8

Birçok farklı yazarın blog gönderilerini içeren bir tablo var. Yapmak istediklerim, en güncel 10 yazara ait en son yayını göstermektir.MySQL - En son yayınlanan 10 yazarın her birinin en son yazdığı yayını seç

Her bir yazarın yayınları sırayla tabloya kolayca eklenir, bu da tek bir yazar tarafından gönderilen yayınların çalıştırılabileceği anlamına gelir. Bunu yapmak için tek bir sorgu ile gelme vakti yaşıyorum.

Bu bana son 10 benzersiz yazar kimliğini verir; Her yazarın en son gönderisini almak için bir alt seçen olarak kullanılabilir mi?

SELECT DISTINCT userid 
FROM posts 
ORDER BY postid DESC 
LIMIT 10 

cevap

3
select userid,postid, win from posts where postid in (
SELECT max(postid) as postid 
FROM posts 
GROUP BY userid 
) 
ORDER BY postid desc 
limit 10 

http://sqlfiddle.com/#!2/09e25/1

+0

Bu, yakındır - her kullanıcı için en son postıdı döndürür, ancak satırlardaki verilerin geri kalanı yok maç. Örneğin, bu işe yaramaz: SELECT userid, title, bodytext, MAX (id) kimliği FROM posts GRUP BY userid SİPARİŞİNDEN DOĞRU LİMİT 10 –

+0

doğru Tüm alanları istiyorsanız, maalesef bir alt soruna ihtiyacınız var. Cevabımı düzenledim. –

+0

Mükemmel, teşekkürler. Bu mükemmel çalışıyor. –

1

Her yazarın son gönderimi ve postid DESC tarafından sipariş için bir alt sorgunun olması gerekir. Eğer

ALTER TABLE posts ADD INDEX user_post_ndx (userid,postid); 
+0

Sen kullanıcı kimliği üzerinde bileşik endeksi gerekmez bu endeksi olduğundan emin olun

SELECT B.* FROM ( SELECT * FROM ( SELECT userid,MAX(postid) postid FROM posts GROUP BY userid ) AA ORDER BY postid DESC LIMIT 10 ) A INNER JOIN posts B USING (user_id,post_id); 

: Sonra, posts tabloya o sonucu katılmak postID olarak postID, herhangi bir şekilde benzersiz tanımlayıcı olabilir ve yalnızca yazıyı yapan bir yazar için var olur. – DRapp

+0

@DRapp AA alt sekansını hızlandırmak için bu bileşik indeksi gereklidir (tam dizin taramasıyla tam indeks taraması) – RolandoMySQLDBA

1
SELECT userid 
    , MAX(postid) AS lastpostid 
FROM posts 
GROUP BY userid 
ORDER BY lastpostid DESC 
LIMIT 10 
İlgili konular