2016-12-17 1 views
3

Ich muss TC5 nicht die ID einen Rang zuweisen.Rank-Funktion in MySQL einen Rang zuweisen

SELECT a.id, a.user_id, a.tc1, a.tc4, min(a.tc5), a.tc2, b.avatar, c.username, @curRank := @curRank + 1 AS Rank 
FROM 
treningove_casy a INNER JOIN 
sn_users b ON a.user_id=b.id INNER JOIN 
users c ON a.user_id=c.id , (SELECT @curRank := 0) r 
WHERE a.tc2 LIKE 'Motokáry Modrice' 
GROUP BY a.user_id 

Also wie ist das Bild. Bitte helfen

enter image description here

Der modifizierte Code

SELECT x.*, (@curRank := @curRank + 1) as Rank 
FROM (SELECT a.id, a.user_id, a.tc1, a.tc4, min(a.tc5) as tc5, 
      a.tc2, b.avatar, c.username, 
     FROM sbhgl_chronoengine_chronoforms_datatable_treningove_casy a INNER JOIN 
      sbhgl_jsn_users b 
      ON a.user_id = b.id INNER JOIN 
      sbhgl_users c 
      ON a.user_id = c.id 
     WHERE a.tc2 LIKE 'Motokáry Modřice' 
     GROUP BY a.user_id 
    ) x CROSS JOIN 
    (SELECT @curRank := 0) params 
ORDER BY tc5 DESC; 
+0

Sie müssen 'ORDER BY tc5' verwenden. – Barmar

+0

Ihre Abfrage weist ein Problem auf, weil Sie bei der Verwendung von 'GROUP BY' nicht aggregierte Spalten auswählen. –

Antwort

3
SELECT a.id, a.user_id, a.tc1, a.tc4, a.tc2, b.avatar, c.username, 
    (select rank from (SELECT 
     IF (@score=s.tc5, @rank:[email protected], @rank:[email protected]+1) rank, 
     @score:=s.tc5 tc5s 
     FROM treningove_casy s, 
     (SELECT @score:=0, @rank:=0) r 
     ORDER BY tc5 DESC) s) as rank 
FROM 
treningove_casy a INNER JOIN 
sn_users b ON a.user_id=b.id INNER JOIN 
users c ON a.user_id=c.id , (SELECT @curRank := 0) r 
WHERE a.tc2 LIKE 'Motokáry Modrice' 
GROUP BY a.user_id 

Sie oben Lösung versuchen können, Hoffnung dies wird Ihnen helfen.

+0

Sie können keine Unterabfrage haben, die mehrere Zeilen in der SELECT-Liste zurückgibt. – Barmar

+0

Hallo, danke für deine Hilfe, ich habe diesen Code eingegeben. Ich habe einen Fehler: SQLSTATE [21000]: Kardinalitätsverletzung: 1242 Unterabfrage gibt mehr als 1 Zeile zurück –

0

In MySQL verwenden Sie normalerweise Variablen für Ränge. In Ihrem Fall würden Sie eine Unterabfrage verwenden. Ich finde, dass die Variable Methode immer mit GROUP BY funktioniert nicht:

SELECT x.*, (@curRank := @curRank + 1) as Rank 
FROM (SELECT a.id, a.user_id, a.tc1, a.tc4, min(a.tc5) as tc5, 
      a.tc2, b.avatar, c.username, 
     FROM treningove_casy a INNER JOIN 
      sn_users b 
      ON a.user_id = b.id INNER JOIN 
      users c 
      ON a.user_id = c.id 
     WHERE a.tc2 LIKE 'Motokáry Modrice' 
     GROUP BY a.user_id 
    ) x CROSS JOIN 
    (SELECT @curRank := 0) params 
ORDER BY tc5 DESC; 

Hinweis: Die Verwendung von Tabellen-Aliases ist gut. Es ist jedoch viel einfacher, eine Abfrage zu verstehen, wenn die Aliase Abkürzungen für die Tabellennamen sind.

+0

Hallo, vielen Dank für Ihre Hilfe, habe ich diesen Code eingegeben. Ich habe einen Fehler: unbekannt 15 expr_type in SELECT [8] –

+0

@MotoKartCup. . . Läuft die Unterabfrage? Ich sehe nichts, was einen solchen Fehler verursachen würde. –

+0

Ich habe den modifizierten Code hinzugefügt. schreibt immer noch Fehler: 15 unbekannt expr_type in SELECT [8] –