mysql sorgu

Kodla Büyü

mclaren

Seçkin Üye
Seçkin Üye
Mesajlar
578
bir tablom var, tablomda ad, tarih, puan gibi alanlar var, ben bu tablodan en yüksek puanlı 20 kişiyi çekmek istiyorum, fakat 1 kişi listede 1 den fazla kayıtlı, örnek tabloyu aşağıda vereyim.

id ad puan tarih
1 a 55
2 b 57
3 b 59
4 a 45
.
.

SELECT ad,max(puan) as puan,tarih from liste where ad<>' ' group by ad order by max(puan) desc LIMIT 0,20

hata şurada bu sorgu a kişisinin en yüksek puanını alıyor yani 55 i, ama a kişisinin diğer tarihini getiriyor
 
Sadece bir tahmin şunu dener misiniz?

Kod:
SELECT ad,max(puan) as puan,tarih from liste where ad<>' ' group by ad,tarih order by max(puan) desc LIMIT 0,20
 
hocam tarihe göre niye grupladık, benim amacım tarihe göre değil yüksek puanlı olanları yukarıdan aşağı sıralamak ama 1 kişiyi 1 kez listelemek istiyorum, yani en yüksek puanı listelensin gerisi listelenmesin
 
Hocam sadece aynı isimlerin tekrarlamamak için distinct komutu kullanılrı yani

select Distinct(Ad) from liste order by puan desc Limit 0,20 işini görmesi lazım
 
idemir' Alıntı:
Hocam sadece aynı isimlerin tekrarlamamak için distinct komutu kullanılrı yani

select Distinct(Ad) from liste order by puan desc Limit 0,20 işini görmesi lazım

hocam yalnız sadece adı almicam, tüm alanları almam lazım
 
Kod:
SELECT ad, MAX(puan) 
FROM tablo_adi
GROUP BY ad 
ORDER BY MAX(puan) DESC LIMIT 0,20

bunu bir deneyin..
 
pehepe' Alıntı:
Kod:
SELECT ad, MAX(puan) 
FROM tablo_adi
GROUP BY ad 
ORDER BY MAX(puan) DESC LIMIT 0,20

bunu bir deneyin..

hocam zaten ilk yaptığım olay buydu, isim ve maksimim puan doğru geliyor fakat tarih farklı geliyor, yani örneğin a kişisinin en yüksek puanı bir kayıttan, tarihi diğer kayıttan geliyor
 
pcogretmen' Alıntı:
pehepe' Alıntı:
Kod:
SELECT ad, MAX(puan) 
FROM tablo_adi
GROUP BY ad 
ORDER BY MAX(puan) DESC LIMIT 0,20

bunu bir deneyin..

hocam zaten ilk yaptığım olay buydu, isim ve maksimim puan doğru geliyor fakat tarih farklı geliyor, yani örneğin a kişisinin en yüksek puanı bir kayıttan, tarihi diğer kayıttan geliyor

kusura bakmayın tarih kısmını görmemişim.
 
Hocam o zaman yapacağınız işlem aklıma gelen şu iki farklı tablo açacaksınız Joinlerle bunları birbirine bağlayarak değerleri çağıracaksınız aklıma gelen ilk fikir bu yalnız ad ları sadece bir tabloya yapmanız lazım ki Distinct komutu işe yarasın
 
idemir' Alıntı:
Hocam o zaman yapacağınız işlem aklıma gelen şu iki farklı tablo açacaksınız Joinlerle bunları birbirine bağlayarak değerleri çağıracaksınız aklıma gelen ilk fikir bu yalnız ad ları sadece bir tabloya yapmanız lazım ki Distinct komutu işe yarasın

sorgu2="SELECT ad,max(puan) as puan from puan group by ad order by max(puan) desc limit 0,20"

hocam önce bu şekilde adı ve o kişinin maksimum puanını buldum ve alttaki şekilde istediğim kayıtları çekebildim

sorgu="SELECT * from puan order by puan desc"
set sorgus = baglantim.execute(sorgu)
do while not sorgus.eof
set sorgus2 = baglantim.execute(sorgu2)
do while not sorgus2.eof
if (sorgus("ad")=sorgus2("ad")) and (sorgus("puan")=sorgus2("puan")) then...........
istediğim kayıtlar
end if
loop
sorgus2.movenext
loop
sorgus.movenext
 
Kod:
SELECT ad,max(puan) as maxpuan,tarih from liste where ad<>' ' group by ad order by maxpuan desc LIMIT 0,20
deneyip sonucu yazabilir misiniz?
 
BBNET
Geri
Üst