У меня есть таблица предметов, за которые пользователи могут голосовать. В этой таблице есть столбец votes
, в котором хранится количество голосов, набранных этим элементом, и столбец rank
, который ранжирует все элементы на основе количества голосов, которые они имеют (т.е. большинство голосов получает ранг 1, второе место получает ранг 2 и т. д.)
В настоящее время я пересчитываю ранг каждого пункта после каждого голосования. То есть, когда пользователь голосует, я добавляю его в столбец votes
этого элемента, а затем обновляю каждый рейтинг следующим запросом:
SET @rank = 0
UPDATE items SET rank = @rank := @rank + 1 ORDER BY votes DESC
Это работает по большей части, но не учитывает связи при голосовании. Если бы у меня были голоса [10, 4, 3, 0], я бы ожидал звания [1, 2, 3, 4]
. Однако, если у меня есть голоса [10, 10, 3, 0]
, я бы хотел получить звания [1, 1, 3, 4]
. Этого не происходит; Я все еще получаю звания [1, 2, 3, 4]
.
Как я могу включить связи, как я описал выше?