2016-04-05 8 views
0

Sitemde bir Sıralama var - 2 Tablolar: KULLANICILAR ve CEVAP.MySQL - Bir Sıralamadaki yinelenen kullanıcıları nasıl ortadan kaldırırım?

CEVAPLAR TABLO geçerli:

> ====================== 
> QUIZID ----- USERID ---- TOTALPOINTS ---- TYPE1 -- TYPE2 - TOTALTIME 
> 100 ------ 22 ------- 100  ----- 30 ---- 70 ---- 300 
> 100 -------- 45 ------- 80  ------ 40 -----40 ----- 280 
> 101 --------- 45 ------- 60 ------------30 -----30 ------200 

TİP1 ve TİP2 ("Satış" ve "Pazarlama" gibi) farklı soru kategorilerde acumulated noktalarıdır - ve TİP1 WIN bir DRAW, en çok puan var EĞER .. TİP 2'de (tam tablonun 11 türü vardır) ..

BURAYA: Kullanıcı 22 Puanınız 100 Puan - ve Kullanıcı 45 140 Puan.

Her kullanıcı için 1'den fazla cevap yapabilirsiniz - çünkü çok sayıda sorunuz vardı.

MY SORUN:

KULLANICI TABLO geçerli:

======================== 
USERID ------ NAME 
    22 ------ JOHN 
    22 -------- JOHN 
    22 -------- JOHN 
    45 -------- MARK 
========================= 

Bazı kullanıcılar kullanıcı masaya çoğaltılamaz edildi.

Ben sıralamasını oluşturmak için bu SEÇ kullanıyorum (TOP 50):

USERID - NAME - TOTALPOINTS - TYPE1 - TYPE2 - TOTALTIME 
22 ---- JOHN -  300 ----- 90 ----- 210 -- 900 
45 ---- MARK --- 140 ----- 70 ----- 70 ---- 480 

USERID 22 3x geçerli:

SELECT users.userid, 
     users.name, 
     Sum(totalpoints), 
     Sum(type1), 
     Sum(type2), 
     Min(totaltime) 
FROM answers 
     INNER JOIN users 
       ON users.userid = answers.userid 
WHERE totalpoints > 0 
GROUP BY users.userid 
ORDER BY Sum(totalpoints) DESC, 
      Sum(type1) DESC, 
      Sum(type2) DESC, 
      Min(totaltime) 
LIMIT 50 

Ama ..

Ben folow sonucu var daha fazla puan çünkü KULLANICI TABLOSU 3x ..

Bunu düzeltmek için herhangi bir yolu var - fazladan silmeden kullanıcı masasından mı?

(I Sıralaması hakkın var kullanıcıları silebilir .. ama yarın herkes tekrar çoğaltılamaz, sorun dönecektir çünkü .. sorunu gidermek yoksa)

tks !!

  • DUPLICATED ROWS'u KALDIRMALIM gerekiyor. Sum değil.
+0

Olası yinelenen [SUM DISTINCT Satırları Nasıl?] (Http://stackoverflow.com/questions/4464946/how-do-i-sum-distinct-rows) – rsjaffe

cevap

1

Öyle gibi bir alt sorgu üzerinde katılmadan deneyebilirsiniz: alt sorgu yalnızca kullanıcıların tablosundan ayrı satırlar içeren

SELECT users.userid, 
     users.name, 
     Sum(totalpoints), 
     Sum(type1), 
     Sum(type2), 
     Min(totaltime) 
FROM answers 
     INNER JOIN (SELECT DISTINCT * FROM users) AS users 
     ON users.userid = answers.userid 
WHERE totalpoints > 0 
GROUP BY users.userid 
ORDER BY Sum(totalpoints) DESC, 
     Sum(type1) DESC, 
     Sum(type2) DESC, 
     Min(totaltime) 
LIMIT 50 

....

+0

Merhaba @ Mark-Watson! Her şeyden önce, zamanı paylaşmak ve yardım etmek için tks! Subquery hakkında düşünüyordum .. ama alt soruyu nasıl yapmam gerektiğini bilmiyordum .. Tamamen kayboldu ... ve sen benim problemimi çözdün! - Harika Çözüm! ttt a lottttttttttttttttt! Daniel – DANIEL