Yazar |
|
unforgiven
Kayıt: 12.06.2008 |
|
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
ist
Kayıt: 01.02.2006 |
|
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
Kayıt: 12.06.2008 |
|
Ö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
Kayıt: 26.02.2006 |
|
"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
Gaziantep
Kayıt: 02.10.2006 |
|
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
Kayıt: 12.06.2008 |
|
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
balikesir
banlandı
Kayıt: 01.12.2006 |
|
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
istanbul
admin
Kayıt: 17.11.2005 |
|
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
Kayıt: 08.06.2008 |
|
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
|
|
| | | | | |