/ / Funkcja rangowa w MySQL przypisuje rangi - mysql, sql, rank

Funkcja rang w MySQL przypisuje rangę - mysql, sql, ranga

Muszę przypisać pozycję do TC5, a nie id.

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

Więc jak obraz. Proszę pomóż

wprowadź opis obrazu tutaj

Zmodyfikowany kod

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;

Odpowiedzi:

1 dla odpowiedzi № 1
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:=@rank, @rank:=@rank+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

Możesz wypróbować powyższe rozwiązanie, Hope to ci pomoże.


0 dla odpowiedzi nr 2

W MySQL zazwyczaj używasz zmiennych dla rang. W twoim przypadku użyjesz podkwerendy. Uważam, że metoda zmiennej nie zawsze działa GROUP BY:

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;

Uwaga: Używanie aliasów tabel jest dobre. O wiele łatwiej jest zrozumieć zapytanie, jeśli aliasy są skrótami nazw tabel.