3 COUNT'a по трем таблицам

Nogrogomed

Новичок
3 COUNT'a по трем таблицам

Может была такая тема (оч наверняка), но поиском ее не нашел. Если что - ткните пальцем, плиз.

Полдня мучаюсь над запросом и че-то никак не получается. Мануал уже затер до дыр - и ничего...

Ситуация такая:
есть
табица заказов (id, date)
таблица товаров в заказах первой категории (id, zakaz_id, tovar_id)
таблица товаров в заказах второй категории (id, zakaz_id, tovar_id)

Немогу составить запрос, который бы выводил статистику: количество заказов за месяц, количество товаров 1-й категории в этих заказах за месяц, количество товаров 2-й категории в этих заказах за месяц.

т.е. нужна строчка типа:

2007(год), 1(январь), 28(количество заказов), 35(количество товаров первой категории), 11(количество товаров второй категории).

Вродебы задача легкая, но что-то я ее не смог осилить. Пробовал череp UNION, но он мне выдает не то что мне нужно.

Помогите, плиз!!! Буду премного благодарен.
 

Фанат

oncle terrible
Команда форума
а нафига две таблицы по категориям?
но если уж сделал, то всё равно какие сложности? оператор груп бай тебе известен?
 

Nogrogomed

Новичок
Известен. Куда ж без него. Вот выборка количества заказов по месяцам. Работает.
Код:
SELECT  YEAR(FROM_UNIXTIME(MIN(`zakaz`.`data`))) as `god`,
            MONTH(FROM_UNIXTIME(MIN(`zakaz`.`data`))) as `mes`,
            SUM(`zakaz`.`cena_total`) AS `sum`,
            COUNT(*) AS `cnt`
            FROM `zakaz`
            GROUP BY MONTH(FROM_UNIXTIME(MIN(`zakaz`.`data`)))
ORDER BY `zakaz`.`data`
Но как как присобачить к ней - общее количество товаров в этих заказах - не пойму.
 

Nogrogomed

Новичок
На запрос
Код:
SELECT `zakaz`.`data`,
            COUNT(*) AS `cnt`,
            COUNT(`zakaz_tovar`.*) AS `cnt_tovar`
            FROM `zakaz`
                LEFT JOIN `zakaz_tovar` ON `zakaz`.`id` = `zakaz_tovar`.`id_zakaz`
            GROUP BY MONTH(FROM_UNIXTIME(MIN(`zakaz`.`data`)))
ORDER BY `zakaz`.`data`";

он мне стандартно выругался:
for the right syntax to use near '*) AS `cnt_tovar` FROM `zakaz` LEFT JOIN `zakaz_to'

Версия мускула - 4.1

При изменении звездочки на `id` - результат тот же.
 

Nogrogomed

Новичок
к сожалению нет...

-~{}~ 06.02.07 10:25:

Ну памагите, плиз!!! ануалы пересмотрел, но там об этом ничего хорошего не сказано!!!
 

Nogrogomed

Новичок
Золотые слова! Только из-за них все сделал. И получилось похоже на правду. Спасибо фанату, он умеет не только отсылать к факам :)

Кому интересно вот запрос:
Код:
SELECT YEAR( FROM_UNIXTIME( `zakaz`.`data` ) ) AS `god` , 
                MONTH( FROM_UNIXTIME( `zakaz`.`data` ) ) AS `mes` , 
                SUM( `zakaz`.`cena_total` ) AS `sum` , 
                COUNT( * ) AS `cnt` , 
                COUNT( `zakaz_tovar`.`id` ) AS `cnt_tovar`,
                COUNT(`zakaz_plus`.`id`) AS `cnt_plus`
        FROM `zakaz` 
            LEFT JOIN `zakaz_tovar` ON `zakaz`.`id` = `zakaz_tovar`.`zakaz_id` 
            LEFT JOIN `zakaz_plus` ON `zakaz`.`id` = `zakaz_plus`.`zakaz_id`
        GROUP BY YEAR( FROM_UNIXTIME( `zakaz`.`data` ) ) , MONTH( FROM_UNIXTIME( `zakaz`.`data` ) ) 
        ORDER BY `zakaz`.`data`
 

Фанат

oncle terrible
Команда форума
нет, я ещё гожусь на то, чтобы уговаривать ламеров, чтобы они проверили свои собственные слова.
 

Nogrogomed

Новичок
и на том спасибо, хотя вчера пробовал в одном из запросов подсчитывать "id", но в каком именно запросе - не помню. Но матерился он тогда тоже на COUNT.
 

Фанат

oncle terrible
Команда форума
и на том спасибо
моя любимая фраза

-~{}~ 06.02.07 13:03:

в том, что лох не читает сообщения об ошибках, не проверяет свои действия - виноват не он.
а я, который тыкает его в это носом.

"вчера пробовал" - это железобетонный критерий истины. стопроцентное алиби. Вопрос, всё ли было так на самом деле - даже не обсуждается. Всё так и было. А сегодня вдруг стало по-другому.
 
Сверху