Ben aşağıdaki tabloları var:
User Basic Data (unique)
[userid] [name] [etc]
User Collection (one to one)
[userid] [game]
User Recorded Plays (many to many)
[userid] [game] [scenario] [etc]
Game Basic Data (unique)
[game] [total_scenarios]
Ben çıktı% azalan Top 10 kullanıcılar için toplama play tamamlanma yüzdesini gösteren bir tablo istiyorum:
Çıktı Tablosu
[userid] [collection_completion]
3 95%
1 81%
24 68%
etc etc
Aklımda, bir kullanıcı için hesaplama sırası:
- dan kapmak kullanıcının toplam sahip senaryoları
User Collection
Game Basic Data
veCOUNT(gbd.total_scenarios)
ile katıldı - Bu kullanıcı için
COUNT(DISTINCT scenario)
tarafından kaydedilen tüm oyunlar kapmak - Toplam sahip senaryoları tarafından kaydedilen tüm oyunlarını bölmek
Böylece sonunda 2 sorgular ve biraz PHP masaj bulunuyor. Tamamlanma yüzdesi sıralama kriteri kullanıcıların listesi için işler biraz daha karışık.
Ben all users' collection totals Bir sorguda kapmak, ve all users recorded plays başka, ve sonra CALCS yapmak ve PHP son dizi sıralamak anlamaya, ama potansiyel olarak tüm yapıyor overkill gibi görünüyor 1000 + kullanıcıları için sadece hiç Top 10 istediğinizde söyledi.
Tüm bu ve LIMIT 10
yapabileceği MySQL kötü bir canavar sorgu var mı? Veya işin toplu bu durumda gitmek için yol işleme PHP ile taşıyorsa?