EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

Запрос распределяющий места в рейтинге

 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB
Запрос распределяющий места в рейтинге
Автор Сообщение
DEXIF
#!/bin/bash
Согнул ложку


Зарегистрирован: 27.09.2006
Сообщения: 939
Откуда: Минск
50609 Монеты

СообщениеДобавлено: Пт, 03 Дек, 2010 13:55    Заголовок сообщения: Запрос распределяющий места в рейтинге Ответить с цитатой

Вобщем суть такова:
Есть таблица marks
Код:
name|mark
test|5
test|8
test2|6
test2|9
test2|3
test3|5
test3|8
...


есть другая таблица rate в которую необходимо записать среднюю mark на определённое name при этом присвоив ему место в рейтинге
допустим так:
Код:
place|name|avgmark
1|test|6.5
1|test3|6.5
2|test2|6


есть ли возможность на чистом 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
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2067
Откуда: Самара
11926 Монеты

СообщениеДобавлено: Пт, 03 Дек, 2010 21:49    Заголовок сообщения: Ответить с цитатой

Можно, но зачем? Когда будите получать данные с 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);
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
DEXIF
#!/bin/bash
Согнул ложку


Зарегистрирован: 27.09.2006
Сообщения: 939
Откуда: Минск
50609 Монеты

СообщениеДобавлено: Сб, 04 Дек, 2010 06:38    Заголовок сообщения: Ответить с цитатой

В данный момент с помощью php и отображаю места... но дело в том что мне необходимо реализовать возможность вывода места по введённому имени... не хочу я для каждого подобного поиска работать с громадными массивами данных... тем более что места перераспределяются раз в сутки а не ежеминутно... проще один раз сформировать необходимые данные в таблице а потом лишь выводить нужное.

Огромное спасибо за направление мыслей в нужное русло Smile
_________________

SED | Let's Rock! | XAP в ЛИЧКУ, SAPE
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB Часовой пояс: GMT
Страница 1 из 1

 


Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group