|
| Дата |
|
USD/RUB | 93.4409 | BTC/USD | 64386.0864 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
16.12.2009, 21:03
|
#1
|
Senior Member
Регистрация: 29.09.2009
Сообщений: 409
Бабло: $93280
|
Вопрос знатокам SQL
Парни, кто шарит, помогите, а то уже мозг сломал.
Имеется таблица, в ней поля 'id', 'site', 'unic' , 'date':
id - AUTO_INCREMENT
Раз в сутки в таблицу сыпятся данные - сколько уников было по каждому site.
Вопрос:
Как одним запросом сделать такую выборку, чтобы получилось 5 столбцов:
site1, unic1(date), unic1(date-1day),unic1(date-2day)
site2, unic2(date), unic2(date-1day), unic2(date-2day)
siteN, unicN(date), unicN(date-1day), unicN(date-2day)
Пояснения:
unic1(date) - сколько уников для site1 за 2009-12-16
unic1(date-1day) - сколько уников для site1 за 2009-12-15
unic1(date-2day) - сколько уников для site1 за 2009-12-14
Необходимо учесть, что иногда данные по site отсутствуют за определенный date. Ну это уже второе. Самое важное, это как сделать выборку.
Последний раз редактировалось Dux; 16.12.2009 в 21:29.
Причина: изменил
|
|
|
16.12.2009, 21:22
|
#2
|
Senior Member
Регистрация: 01.11.2007
Сообщений: 2,269
Бабло: $288535
|
date-1day, date-2day
это что такое?
|
|
|
16.12.2009, 21:28
|
#3
|
Senior Member
Регистрация: 08.09.2009
Сообщений: 158
Бабло: $12430
|
ололо
напиши по-нормальному что из себя представляют date, 1day, 2day
|
|
|
16.12.2009, 21:30
|
#4
|
Senior Member
Регистрация: 29.09.2009
Сообщений: 409
Бабло: $93280
ТС -->
|
ТС
написал
|
|
|
16.12.2009, 21:44
|
#5
|
Senior Member
Регистрация: 15.11.2008
Сообщений: 13,230
Бабло: $247845881
|
странно, я вижу 4 столбца...
|
|
|
16.12.2009, 21:46
|
#6
|
Senior Member
Регистрация: 01.11.2007
Сообщений: 2,269
Бабло: $288535
|
Короче, делай группировку по date, смотри и группируй уже скриптом в цикле
PHP код:
$sql = mysql_query("SELECT * FROM table GROUP BY date");
while ($res = mysql_fetch_assoc($sql)) { $stat[$res['site']][$res['date']]= $res['unic']; }
В итоге получаешь массив и делаешь с ним всё, что хочешь.
|
|
|
16.12.2009, 21:51
|
#7
|
Senior Member
Регистрация: 29.09.2009
Сообщений: 409
Бабло: $93280
ТС -->
|
ТС
Цитата:
Сообщение от deschain
Короче, делай группировку по date, смотри и группируй уже скриптом в цикле
PHP код:
$sql = mysql_query("SELECT * FROM table GROUP BY date");
while ($res = mysql_fetch_assoc($sql)) { $stat[$res['site']][$res['date']]= $res['unic']; }
В итоге получаешь массив и делаешь с ним всё, что хочешь.
|
ну это понятно
я хотел, чтобы оперативку не забивать
Цитата:
странно, я вижу 4 столбца..
|
ну там типа еще столбец "минус 3 дня". забыл добавить
|
|
|
16.12.2009, 21:52
|
#8
|
Senior Member
Регистрация: 01.11.2007
Сообщений: 2,269
Бабло: $288535
|
Кхм. Когда ты делаешь запросы к базе, выборки идут в оперативке, так и так забиваешь.
Имхо, мой пример проще, чем извращаться с запросами, просто это не выдрать. Если делать запросом, ресурсов больше сожрешь.
|
|
|
16.12.2009, 22:08
|
#9
|
Senior Member
Регистрация: 29.09.2009
Сообщений: 409
Бабло: $93280
ТС -->
|
ТС
Цитата:
Сообщение от deschain
Кхм. Когда ты делаешь запросы к базе, выборки идут в оперативке, так и так забиваешь.
Имхо, мой пример проще, чем извращаться с запросами, просто это не выдрать. Если делать запросом, ресурсов больше сожрешь.
|
Согласен. Счас попробовал, твой пример работает просто супер.
Респект
|
|
|
17.12.2009, 00:53
|
#10
|
учу php
Регистрация: 04.04.2008
Сообщений: 1,162
Бабло: $68290
|
Поле id удали, оно тут не нужно. Естественным ключом будет
'site' + 'date' UNIQUE
Это позволит делать INSERT... ON DUPLICATE KEY UPDATE uniq = N;
Далее, если сгруппируешь по дате, именно так как чел предложил - у тебя - же сольются все сайты по данной дате.... разве не так?
мне кажется запрос будет SELECT site, date, uniq FROM `table` GROUP BY site, date WHERE date <= "date" AND date >= "date2";
ну а разложить в массив... это уже на стороне php, иначе придётся подзапросы делать (это можно, но более накладно по производительности, как правильно заметили).
вот как - то так.
__________________
Подпись??? Не продам!
|
|
|
|