Kendim çözemediğim bir problem buldum.Farklı tablolardan kullanıcı puanları
AE_Users tablosundaki kullanıcılara özel Puanlarını sakladığım yer AE_Users Ek AE_Event tablosuna sahibim, kullanıcıların katılabileceği etkinlikleri depolarım ve bu etkinlikler için saniyeler içinde (zaman damgası) oynatma süresini saklıyorum CRON script'in sunucudaki oyuncularını kontrol etmesi. AE_EventJoin adlı kullanıcının, olaylardan birine katıldığında saklandığı başka bir tablo var (bu nedenle birden çok olay kimliğine katılan bir kullanıcının birden çok kaydı olabilir)
3 SQL kullanarak bir kullanıcının puan sayısını hesaplayabiliyorum PHP komut:
SELECT `SteamID` FROM AE_Users WHERE `SteamID` = $SteamID
SELECT SUM(`EventInfo`) FROM AE_Events WHERE ID IN (SELECT `EventID` FROM AE_EventJoin WHERE `JoinType` = 1 AND `SteamID` = '$SteamID')
SELECT `Points` FROM AE_Users WHERE `SteamID` = $SteamID
ama şimdi en yüksek puana sahip 5 kullanıcıları üst almak gerekir ve gerçekten onları bana DB sorgulamak için nasıl çözememiştir.
DB'yi tüm kullanıcılar için sorgulamak istemiyorum ve sonra bunları PHP'ye göre sıralamak çok çirkindir.
Kullanıcı noktalarını tek bir SQL sorgusundan nasıl hesaplayacağımızın bir yolu olduğuna inanıyorum. Kendim inşa etmeye çalıştım ama beklendiği gibi çalışmıyor. Ben böyle bir cevap başardı: phpMyAdmin result
ve bu yanlıştır:
SELECT T1.`SteamID`, T1.`Points` AS PointCount, SUM(T2.`EventInfo`) AS PointCount FROM AE_Users T1, AE_Events T2 WHERE T2.ID IN (SELECT `EventID` FROM AE_EventJoin WHERE `JoinType` = 1 AND `SteamID` = T1.`SteamID`) ORDER BY PointCount LIMIT 5
bu döner. Sadece bir kullanıcı döndürür ve ilk PointCount kullanıcının özel nokta sayısıdır, ancak doğru olan ikinci PointCount tamamen yanlıştır. resim phpMyAdmin Event points
Ve bu iki değişkeni bir PointCount'a birleştirmek istiyorum, ancak GROUP BY komutu bazı hatalar yüzünden yapmama izin vermedi. Ancak büyük bir sorun değil, onları kolayca PHP'de birleştirebilirim.
Tabii ki, sahip olduğum yapıya sahip tablolardan ihtiyacım olan bilgiyi nasıl elde edebileceğimin bir yolu var mı?
teşekkür ile yazılabilir, senin (ilk kod) çözümü son derece yararlı oldu. SUM (T2.'EventInfo') + T1.'Points' olarak ikinci PointCount'ı hesaplamak için biraz değiştirdim ve DESC için siparişi değiştirdim ve beklendiği gibi çalışıyor. Çok teşekkür ederim :) – ffredyk