У меня есть таблица items
, в которой перечислены различные элементы со столбцами id
, popularity
и rank
.
popularity
содержит int
, позволяющий сортировать элементы по популярности.
Я сделал запрос на сортировку по популярности и установил ранг для каждой записи:
SELECT id,
@curRank := @curRank + 1 AS rank
FROM items, (SELECT @curRank := 0) r
ORDER BY popularity DESC
Этот запрос отлично работает и дает результат с id
и rank
где значение rank
соответствует ожидаемому, и соблюдайте порядок на popularity
.
. Я пытаюсь добиться установки значения rank
для каждой записи, и я попытался сделать это следующим образом:
UPDATE items A
JOIN (
SELECT id,
@curRank := @curRank + 1 AS rank
FROM items,
(SELECT @curRank := 0) r
ORDER BY popularity DESC
) AS ranks
SET A.rank = ranks.rank
WHERE A.id = ranks.id
Значение rank
устанавливается для каждой строки, но не соответствует ORDER BY popularity DESC
. Вместо этого значение ранга устанавливается в порядке id
(id
1 имеет rank
1, id
2 имеет rank
2 и т. Д.).
Что я делаю неправильно?
С уважением,