Konuyu görüntüle
IUCODERS FORUM > Programlama > Veritabanları > Sorgu: en son mesaj gönderen üyeler ve en son mesajları
Yazar
unforgiven


avatar

Kayıt: 12.06.2008
03.01.2009-11:23 #54200
Merhaba arkadaşlar,
MySql'de yapmaya çalıştığım bir projede başlıkta belirttiğim gibi bir sorguyu çalıştırmak istiyorum ama sabahın erken saatlerinden beri uğraşmama rağmen tam istediğimi elde edemedim.

Bir blog sisteminde üyelerin en son gönderdikleri mesajların başlıklarını ve gönderenleri listeletmek istiyorum. Fakat sonuç listesinde her üyenin yalnızca 1 kere görünmesini ve ilgili satırda dönen mesaj başlığının da o üyenin en son mesajına ait olmasını istiyorum.

SELECT
`member`.`id`,
`member`.`name`,
`member`.`surname`,
`message`.`title`
FROM
`message`, `member`
WHERE `message`.`memberId` = `member`.`id`
GROUP BY `member`.`id`
ORDER BY `message`.`date` DESC
LIMIT 0, 10

böyle yazınca her üye için tek bir mesaj başlığı alabiliyorum fakat o mesaj üyenin son mesajı olmuyor. Ben her üye için o üyenin son mesajının dönmesini ve listenin de 10 farklı üyeden oluşmasını istiyorum. Bu konuda yardım edebilecek arkadaşlara şimdiden çok teşekkür ederim.





Yazar
aliozkan


avatar
ist
Kayıt: 01.02.2006
03.01.2009-12:19 #54201
SELECT
`member`.`id`,
`member`.`name`,
`member`.`surname`,
`message`.`title`
FROM
`member` left join `message` on `message`.`memberId` = `member`.`id`
ORDER BY `message`.`date` DESC
LIMIT 0, 10
bunu dene bir de





Yazar
unforgiven


avatar

Kayıt: 12.06.2008
03.01.2009-12:35 #54202
Öncelikle teşekkür ederim. Fakat verdiğin sorgu benim yukarıda yazdığım sorgunun GROUP BY'sız hali ile aynı sonucu döndürüyor.





Yazar
halit


avatar

Kayıt: 26.02.2006
03.01.2009-13:09 #54203
"SELECT media. * , yenitablo.vote_date FROM media INNER JOIN (SELECT * FROM yarisma_oylari ORDER BY vote_date DESC ) AS yenitablo ON media.mediaID = yenitablo.winner_media WHERE yenitablo.user_id =".doubleval($_SESSION['user_id'])." AND yenitablo.yarisma_id =".$yarisma_id." GROUP BY yenitablo.winner_media ORDER BY yenitablo.vote_date DESC LIMIT 3"

gibi birşey kullanmışım. sanırım bunun beznerini uyarlarsan işine yarayabilir.





Yazar
burakkanmaz


avatar
Gaziantep
Kayıt: 02.10.2006
03.01.2009-14:07 #54205
unforgiven yazdi
 

SELECT
`member`.`id`,
`member`.`name`,
`member`.`surname`,
`message`.`title`
FROM
`message`, `member`
WHERE `message`.`memberId` = `member`.`id`
GROUP BY `member`.`id`
ORDER BY `message`.`date` DESC
LIMIT 0, 10


SELECT
`member`.`id`,
`member`.`name`, 
`member`.`surname`, 
`message`.`title`
FROM
`message`, `member`
WHERE `member`.`id` IN (SELECT memberId FROM `message` GROUP BY `message`.`memberId`
ORDER BY `message`.`date` DESC LIMIT 0, 10)






Yazar
unforgiven


avatar

Kayıt: 12.06.2008
03.01.2009-14:41 #54207
burakkanmaz, teşekkür ederim ama alt sorgularda LIMIT kullanılmıyor kullandığım sunucuda. Zaten diğer açıdan göze mantıklı görünse de sonuçları birleştireceğine aksine dağıtıyor. Fakat halit arkadaşımızın verdiği yapı işimi gördü, çok teşekkürler. Bu tarz bir subquery örneği arıyordum ben de. Zamanında veritabanı derslerinde falan böyle örnekler görmüştük ama hep unutmuşum. Yardımcı olan herkese tekrar teşekkür ederim.





Yazar
blindalley


avatar
balikesir
banlandı
Kayıt: 01.12.2006
03.01.2009-15:24 #54208
SELECT
`member`.`id`,
`member`.`name`,
`member`.`surname`,
`message`.`title`
FROM
`message`, `member`
WHERE `message`.`memberId` = `member`.`id`
GROUP BY `member`.`id`
ORDER BY `message`.`date` DESC
LIMIT 10,offset 0
işe yarar mı bilmiyorum ama geçenlerde bende bu tarz bişeyle uğraşmıştım ve itediğim sonucu almıştım;)





Yazar
orhan


avatar
istanbul
admin
Kayıt: 17.11.2005
03.01.2009-18:21 #54239
daha optimize birşey aklıma gelirse yazarım.
select mb.username, (select title from message where memberid=mb.id order by date desc limit 0,1)  from member mb 






N/A
Yazar
piedro


avatar

Kayıt: 08.06.2008
03.01.2009-19:13 #54247
performans açısından pek önerilmez ama şöyle bi kullanım da işinizi görebilir

.
.
.
from table t1
where t1.message_date = (select max(t2.message_date)
from table t2
where t2.user = t1.user)
.
.
.


veya tam hatırlayamıyorum fakat oracle için rowid ler vardır,, mysql için karşılığını bilemiyorum, onlarda max rowid alt sorguda kullanılabilir..
(bu oracle için verdiğim rowid örneği her durumda geçerli değil ve en son kullanılması gereken alternatif)





Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb