Mysql Sıralamada Kaçıncı Sırada Olduğunu Bulma
-
Merhaba,
select * from users where league = "0" order by leagueScore desc
Yukarıdaki fonkiyon ile ligi 0 olan kişilerin lig skorunu büyükten küçüğe doğru sıralıyor.Bu fonksiyona şu işlemi mysql sorgusu ile nasıl ekleyebilirim?
"idsi 12 olanın yukarıdaki listeye göre kaçıncı sırada olduğunu yazdır" -
https://stackoverflow.com/questions/3614666/mysql-get-row-position-in-order-by
Burada bir çözüm mevcut.
-
/* Satır satır position'ı göster*/ set @rowId = 0; SELECT @rowId := @rowId + 1 as position,id,league,leagueScore FROM tmplig ORDER BY leagueScore DESC
---------------------
/* Id'si 6 olanın position değerini bulalım */ SELECT id, (SELECT COUNT(*) FROM `tmplig` where id >= 6 order by leagueScore DESC) AS `position`, league FROM tmplig WHERE id = 6
-
saybirs bunu yazdı
/* Satır satır position'ı göster*/ set @rowId = 0; SELECT @rowId := @rowId + 1 as position,id,league,leagueScore FROM tmplig ORDER BY leagueScore DESC
---------------------
/* Id'si 6 olanın position değerini bulalım */ SELECT id, (SELECT COUNT(*) FROM `tmplig` where id >= 6 order by leagueScore DESC) AS `position`, league FROM tmplig WHERE id = 6
/* Id'si 6 olanın position değerini bulalım */ kısmında bulunan sorguyu denediğim zaman belirtilen idye sahip kişiyi getiriyor fakat en az skora sahip olmasına rağmen pozisyon hep 1.
Kodu şu şekilde league=1 olanların içerisinde al dediğim zaman yine hep 1. sırada çıkıyor. Sana zahmet kontrol edebilir misin?
league 1'de 4 kişi var ve en düşük skora sahip kişinin idsi 8. Position 4 olması lazım ama 1 döndürüyor.select id, (select count(*) from users where id >= "8" and league = "1" order by leagueScore desc) as "position", league from users where id = "8" and league = "1" order by leagueScore desc
Edit: id >= 8 yazdığım için idsi 8'den küçük olanları almıyormuş sorun bundan kaynaklı herhalde.
-
edit
saybirs tarafından 19/Ağu/19 17:08 tarihinde düzenlenmiştir -
Aşağıdaki sorgu ile hallettim.
select count(*) from users where leagueScore >= "8" and league = "1" order by leagueScore desc
leagueScore >= "8" olan yere kişinin skorunu yazdırıyorum.
-
Select *,rank() over (Order by ..... desc) siralama from .... having siralama=12
-
emirhan-exp bunu yazdı
Select *,rank() over (Order by ..... desc) siralama from .... having siralama=12
cok guzel bir mantik olmuş. ama lig kısmını WHERE ile, lig içinde ki ID'yi having ile alman gerekecek ki lig içinde ki sırasını versin adamın. genel değil.
edit : yanlışlık ile tab a basinca ilk spacebara basışta post etti :D
rakkoc tarafından 20/Ağu/19 15:13 tarihinde düzenlenmiştir -
Soruyu yanlis anlamisim.
Where league=0 olmali sonu. Having e de hic gerek yok.tesekkurler rakkoc.