Вопрос знатокам SQL - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB93.4409
BTC/USD64386.0864
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 16.12.2009, 21:03   #1
Dux
Senior Member
 
Аватар для Dux
 
Регистрация: 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. Причина: изменил
Dux вне форума  
Старый 16.12.2009, 21:22   #2
deschain
Senior Member
 
Аватар для deschain
 
Регистрация: 01.11.2007
Сообщений: 2,269
Бабло: $288535
По умолчанию

date-1day, date-2day

это что такое?
deschain вне форума  
Старый 16.12.2009, 21:28   #3
Mr.Bogus
Senior Member
 
Регистрация: 08.09.2009
Сообщений: 158
Бабло: $12430
По умолчанию

ололо
напиши по-нормальному что из себя представляют date, 1day, 2day
Mr.Bogus вне форума  
Старый 16.12.2009, 21:30   #4
Dux
Senior Member
 
Аватар для Dux
 
Регистрация: 29.09.2009
Сообщений: 409
Бабло: $93280
ТС -->
автор темы ТС По умолчанию

написал
Dux вне форума  
Старый 16.12.2009, 21:44   #5
imgreen
Senior Member
 
Аватар для imgreen
 
Регистрация: 15.11.2008
Сообщений: 13,230
Бабло: $247845881
По умолчанию

странно, я вижу 4 столбца...
imgreen вне форума  
Старый 16.12.2009, 21:46   #6
deschain
Senior Member
 
Аватар для deschain
 
Регистрация: 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'];

В итоге получаешь массив и делаешь с ним всё, что хочешь.
deschain вне форума  
Старый 16.12.2009, 21:51   #7
Dux
Senior Member
 
Аватар для Dux
 
Регистрация: 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 дня". забыл добавить
Dux вне форума  
Старый 16.12.2009, 21:52   #8
deschain
Senior Member
 
Аватар для deschain
 
Регистрация: 01.11.2007
Сообщений: 2,269
Бабло: $288535
По умолчанию

Кхм. Когда ты делаешь запросы к базе, выборки идут в оперативке, так и так забиваешь.
Имхо, мой пример проще, чем извращаться с запросами, просто это не выдрать. Если делать запросом, ресурсов больше сожрешь.
deschain вне форума  
Старый 16.12.2009, 22:08   #9
Dux
Senior Member
 
Аватар для Dux
 
Регистрация: 29.09.2009
Сообщений: 409
Бабло: $93280
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от deschain Посмотреть сообщение
Кхм. Когда ты делаешь запросы к базе, выборки идут в оперативке, так и так забиваешь.
Имхо, мой пример проще, чем извращаться с запросами, просто это не выдрать. Если делать запросом, ресурсов больше сожрешь.
Согласен. Счас попробовал, твой пример работает просто супер.
Респект
Dux вне форума  
Старый 17.12.2009, 00:53   #10
JMen
учу 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, иначе придётся подзапросы делать (это можно, но более накладно по производительности, как правильно заметили).

вот как - то так.
__________________
Подпись??? Не продам!
JMen вне форума