2016-08-16 16 views
0

Ich versuche, Ergebnisse zu bewerten, erstens basierend auf insgesamt, aber ich muss Bindungen basierend auf dem Datum des letzten Eintrags zu brechen. Unten ist die Abfrage, die ich für das Ranking verwendet, aber nicht mit Bindungen.Ranking Ergebnisse von MySql

SELECT @rownum := @rownum +1 AS rank, total, user_id 
FROM (
    SELECT sum(score) AS total, user_id 
    FROM submissions 
    WHERE group_id = $group_id 
    AND status = 1"; 
    GROUP BY user_id 
     ORDER BY total DESC 
) T, (
    SELECT @rownum :=0 
) a 

Dies gibt die folgende

rank | total | user_id 
    1 | 90 | 1366 
    2 | 89 |  756 
    3 | 89 | 1026 
    4 | 89 | 1987 

Was ich brauche eine andere Sub-Abfrage ist von der frühesten date_submitted je Benutzer Eingaben (oder zumindest die letzte Vorlage) und machen es Rang zu erhalten.

+0

Beispieldaten und erwartete Ergebnis. –

Antwort

2

Die letzte Vorlage pro Benutzer würde wahrscheinlich die neueste (max) Datum, daher können Sie die max() Funktion verwenden Sie es in der Unterabfrage abzurufen:

SELECT @rownum := @rownum +1 AS rank, total, user_id 
FROM (
    SELECT sum(score) AS total, max(your_date_field) as last_submission_time, user_id 
    FROM submissions 
    WHERE group_id = $group_id 
    AND status = 1"; 
    GROUP BY user_id 
     ORDER BY total DESC, last_submission_time ASC 
) T, (
    SELECT @rownum :=0 
) a 
+0

Funktioniert perfekt, danke! – Judson