есть ли возможность на чистом sql определить место при записи в новую таблицу с учётом того что может быть как например в данном случае: первое место получают сразу 2 name?
пока не требовалось распределять места было примерно так:
Код:
INSERT INTO `rate` (select `name`, round(avg(`mark`),2) as `avgmark` from `marks` where group by `name`)
_________________ SED | Let's Rock! | XAP в ЛИЧКУ, SAPE
Можно, но зачем? Когда будите получать данные с rate достаточно указать сортировку по avgmark м получите place средствами php.
Смотрите поиск по запросу rownum mysql + переменные в mysql, вообще все это будет примерно так (не проверял)
set @n:=0;
set @mark:=0;
INSERT INTO `rate`
(select IF(avgmark != @mark;@n:=@n+1;@n:=@n) as place, name,@mark:=avgmark as avgmark from (select `name`, round(avg(`mark`),2) as `avgmark` from `marks` where group by `name`)
На самом деле куда проще это можно решить 2 запросами и одной временной таблице. Создаете временную таблицу rate_tmp с автоинкрементом на поле place (обязательно делайте её drop перед запуском), далее запросы
INSERT INTO `rate_tmp` (select `name`, `avgmark` from (select `name`, round(avg(`mark`),2) as `avgmark` from `marks` where group by `name`) group by `avgmark`);
INSERT INTO `rate`
(select tmp.place, m.name, tmp.avgmark from `rate_tmp` as tmp, (select `name`, round(avg(`mark`),2) as `avgmark` from `marks` where group by `name`) as m where m.avgmark = tmp.avgmark order by tmp.place); _________________ Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)
В данный момент с помощью php и отображаю места... но дело в том что мне необходимо реализовать возможность вывода места по введённому имени... не хочу я для каждого подобного поиска работать с громадными массивами данных... тем более что места перераспределяются раз в сутки а не ежеминутно... проще один раз сформировать необходимые данные в таблице а потом лишь выводить нужное.
Огромное спасибо за направление мыслей в нужное русло _________________ SED | Let's Rock! | XAP в ЛИЧКУ, SAPE