2016-12-17 2 views
3

Мне нужно присвоить ранг TC5, а не id.Функция Rank в MySQL назначает ранг

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 

Так как же картина. Пожалуйста, помогите

enter image description here

Измененный код

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

Вам нужно использовать 'ORDER BY tc5'. – Barmar

+0

У вашего запроса есть проблемы, потому что вы выбираете неагрегатные столбцы при использовании 'GROUP BY'. –

ответ

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 

Вы можете попробовать выше решение, Надеюсь, что это поможет.

+0

У вас нет подзапроса, который возвращает несколько строк в списке SELECT. – Barmar

+0

Здравствуйте, спасибо за вашу помощь, я ввел этот код. Я получил ошибку: SQLSTATE [21000]: Нарушение кардинальности: 1242 Подзапрос возвращает более 1 строки –

0

В MySQL вы обычно используете переменные для рангов. В вашем случае вы будете использовать подзапрос. Я считаю, что переменный метод не всегда работает с 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; 

Примечания: Использование псевдонимов таблиц хорошо. Однако гораздо проще понять запрос, если псевдонимы являются аббревиатурами для имен таблиц.

+0

Здравствуйте, спасибо за вашу помощь, я ввел этот код. У меня есть ошибка: неизвестно 15 expr_type в SELECT [8] –

+0

@MotoKartCup. , , Выполняется ли подзапрос? Я не вижу ничего такого, что могло бы вызвать такую ​​ошибку. –

+0

Я добавил модифицированный код. все еще пишет ошибку: 15 неизвестных expr_type в SELECT [8] –

Смежные вопросы