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

Dark Wizard

Гуру форума
Регистрация
23 Сен 2007
Сообщения
194
Реакции
80
Есть таблица clan_help_parts с полями id, date, login, bonus, penalty.

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

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

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

Т.е. нужно, чтобы они сначала сортировались по дате, а потом к ним применялись сдвиги.

Можно ли это сделать в один запрос? Или вариант только выводить в php в многомерный массив, там назначать позиции-сдвиги, потом сортировать и выводить.
 
Группировать вообще ничего не нужно. Нужно вычислить номер позиции по дате, т.е. отсортировать по дате и пронумеровать. Потом обернуть во внешний запрос и там вычислить новые позиции. Вопрос - возможно ли это сделать в один запрос (может комбинированный) на SQL.
 
На stackoverflow подсказали такое решение:

Код:
$sql = "SELECT *, num - bonus + penalty
  FROM (
    SELECT *, @num := @num + 1 num
      FROM clan_help_parts, (SELECT @num := 0) x
     ORDER BY date
  ) y
  ORDER BY num - bonus + penalty";

Так работает.
 
Назад
Сверху