Database - Veritabanı
Mysqlde Aynı Değere Sahip Satırlardan Güncel Olanını Nasıl Alabilirim?
Mysqlde Aynı Değere Sahip Satırlardan Güncel Olanını Nasıl Alabilirim?
-
Başlığı nasıl yazacağımı pek bilemedim. Şu tür bir işlem yapmak istiyorum. Resimde gördüğünüz gibi tabloya aynı kullanıcıya ait veriler ekleniyor.
Bu eklenen verilerden x username'ine sahip kişinin madalyasını büyükten küçüğe doğru sıralayıp ilk değeri almam gerekiyor.
Şuan kullandığım komut:
SELECT * FROM `bakiye_hareketleri` ORDER BY date DESC, medal DESC LIMIT 5;Sonuç:
Resimde görüldüğü üzere bekmekci adına sahip 5 adet satır var. Burada bekmekci'ye ait 1 satır olmalı. Bu satırda medal ve date değeri en yüksek olan olmalı.
Not: Farklı bir tablo oluşturarak bu sorunu çözbilirim ama şuanki tabloda sorunun çözümü var ise yeni tablo oluşturmaktan kurtulmuş olurum. Bu yüzden önceliğim bu sorunu çözmektir.
username'i 'bekmekci' şeklinde sabit tutamam. Farklı isimde üyelerde olacak.Edit: Aşağıdaki kod ile istediğim işlemi yapıyor ama sadece en eski veriyi veriyor. Bana date ve medal'ı en yüksek olanı vermesi lazım.
h0rtl4kk tarafından 10/Nis/19 21:12 tarihinde düzenlenmiştir
SELECT * FROM `bakiye_hareketleri` where date BETWEEN DATE_ADD(NOW(), INTERVAL -1 WEEK) AND NOW() GROUP BY username HAVING COUNT(*) > 1 ORDER BY medal DESC, date DESC; -
Tekrar tekrar okuyorum acaba yanlış mı anlıyorum diye.
Limit 5 vermişsiniz onu limit 1 yapsanız ?
-
coder2 bunu yazdı
Tekrar tekrar okuyorum acaba yanlış mı anlıyorum diye.
Limit 5 vermişsiniz onu limit 1 yapsanız ?
Limit 1 yaparsam sadece tek kişiyi alacak. Derdimi tam olarak anlatamadım muhtemelen.
Bu tabloya şu şekilde girişler oluyor.ahmet, medal 300;
ahmet, medal 380;
veli, medal 150;
yasin, medal 500;
veli, medal 980;Bu satırlar içerisinde kaç tane x adına sahip satır varsa bu x satırlarından medal'i en yüksek olan x satırını almam lazım. Böylelikle her kullanıcıdan 1 adet en yüksek medal değerine sahip satır olacak.
-
Username e göre dıstınct ve desc kullansan çözmez mi hocam?
-
Roark bunu yazdı
Username e göre dıstınct ve desc kullansan çözmez mi hocam?
DISTINCT kullanarak istediğim sonuca ulaştım. Teşekkürler.
Başkasına lazım olursa diye şuan ki kullandığım kodu paylaşayım.SELECT DISTINCT username, MAX(medal), MAX(date) FROM `bakiye_hareketleri` where date BETWEEN DATE_ADD(NOW(), INTERVAL -1 WEEK) AND NOW() GROUP BY username HAVING COUNT(*) > 1 ORDER BY medal DESC, date DESC;
-
h0rtl4kk bunu yazdıRoark bunu yazdı
Username e göre dıstınct ve desc kullansan çözmez mi hocam?
DISTINCT kullanarak istediğim sonuca ulaştım. Teşekkürler.
Başkasına lazım olursa diye şuan ki kullandığım kodu paylaşayım.SELECT DISTINCT username, MAX(medal), MAX(date) FROM `bakiye_hareketleri` where date BETWEEN DATE_ADD(NOW(), INTERVAL -1 WEEK) AND NOW() GROUP BY username HAVING COUNT(*) > 1 ORDER BY medal DESC, date DESC;
Rica ederim hocam , distinct yapısı tekrarlanan grup verilerini tekli hale getiriyor zaten group by ile having şartını da yazdığın için tek satır döndürecektir ki öyle de olmuş. Kolay gelsin iyi çalışmalar