SQL Выборка записей отсортированных с учётом бонусов

Есть таблица очередей clan_help_parts с полями id, date, login, bonus, penalty.

Задача: вывести записи таблицей, упорядоченных по дате, при этом сдвигать записи с учётом бонусов-пенальти.

Если без сортировки по дате, то работает так:

$sql = "SELECT *, (id + penalty - bonus) as position FROM clan_help_parts ORDER BY position";

Т.е. нужно, чтобы они сначала сортировались по дате, а потом к ним применялись сдвиги (т.е. например bonus = 1 означает что позиция в очереди сдвинется на -1 к началу). Вариант "ORDER BY date, position" не то.

Можно ли это сделать в один запрос? Или вариант только выводить в php в многомерный массив, там назначать позиции-сдвиги, потом сортировать и выводить.


Ответы (1 шт):

Автор решения: Mike
select *, num-bonus
  from (
    select *, @num:=@num+1 num
      from clan_help_parts, (select @num:=0) x
     order by date
  ) y
order by num-bonus
→ Ссылка