Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
SQL-задача (Павел) 30/09/2002 - 15:43:13
      Re: SQL-задача (Bogdan) 30/09/2002 - 17:26:24
      Re: SQL-задача (Павел) 30/09/2002 - 19:51:54
      Re: SQL-задача (vi.k) 01/10/2002 - 09:03:51
      Re: SQL-задача (vi.k) 02/10/2002 - 02:34:11

> Original message text:
> From: Павел - 30/09/2002 - 15:43:13
> Subject:SQL-задача
> -----------------
> Дана таблица Game(player, points, rating).
> В какой-то момент времени в таблице у некоторых игроков меняется параметр points.
> Как должна выглядеть функция, которая будет присваивать игроку номер (поле rating),
> соответствующий его месту в таблице, отсортированной по полю points.
>
> Пишите идеи, методы. Начинающему мастеру поможет
>


From: vi.k - 01/10/2002 - 09:03:51
Subject:SQL-задача
-----------------
Чем больше очков тем меньше занимаемое место?
Например:
120 очков - 1 место
110 очков - 2 место
100 очков - 3 место

Если наоборот, то знаки подправь.

Двумя запросами:

SELECT @p:=points FROM Game WHERE player=идентификатор_игрока
SELECT COUNT(*) rating FROM Game WHERE points>=@p

Одним запросом:

SELECT COUNT(*) rating FROM Game G1, Game G2
WHERE G1.player=идентификатор_игрока AND G1.points<=G2.points

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


Соответственно поле rating ... не нужнО.

Варианты хороши когда рэйтинг нужен часто и для какого-нибудь отдельного игрока, а не для всей кучи сразу, потому как количество запросов прямо пропорционально количеству игроков.
А ежели для всей кучи и сразу, то:
SELECT player FROM Game ORDER BY points DESC
Место равно номеру записи в выборке.

Вариант с доп. таблицей не понял. Зачем так страшно?
Тем более, что (в последних версиях MySQL, не помняю начиная с какой) DELETE FROM ... удаляет, но автоинкрементное поле не обнуляет.



[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
4884



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |