2014-01-12 3 views
0

Я хочу сохранить сохраненный индекс ранжирования каждой строки в таблице MySQL на основе значения столбца рейтинга в той же строке. Я нашел решение here и here, но оно не работает.Расчет ранга MySQL не выполняется, переменная всегда равна нулю

SELECT * FROM `MyTable` T 
JOIN 
(
    SELECT `id`, @[email protected]+1 AS `rank_calculated` 
    FROM `MyTable`, (SELECT @rownum=0) AS `inline_trick` 
    ORDER BY `rating` 
) R 
ON R.`id` = T.`id` 

Это выбирает все строки в MyTable но rank_calculated столбец всегда нуль. Может ли кто-нибудь сказать мне, почему?

MySQL Ver 14,14 DISTRIB 5.5.34, для Debian-Linux-гну (i686) с использованием Readline 6.2

ответ

1

Попробуйте использовать :=:

SELECT * 
FROM `MyTable` T JOIN 
    (SELECT `id`, @rownum:[email protected]+1 AS `rank_calculated` 
     FROM `MyTable`, (SELECT @rownum:=0) AS `inline_trick` 
     ORDER BY `rating` 
    ) R 
    ON R.`id` = T.`id`; 

EDIT:

Просто чтобы быть ясно, в операторе select= относится к логическому сравнению, а не к присвоению. Вам нужно := для задания. Вы можете прочитать больше here.

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