несколько count с условием отбора

troff

Новичок
несколько count с условием отбора

Добрый день!
Подскажите можно ли сделать это одним запросом. Если ДА, то как? Имеет ли смысл делать одним запросом?
Отобрать записи где поле idp равно $idp и:
PHP:
data = текущий месяц
"SELECT COUNT(*) FROM statistic WHERE idp=$idp AND MONTH(`data`)=MONTH(now()) AND YEAR(`data`)=YEAR(now())");
data = прошлый месяц
"SELECT COUNT(*) FROM statistic WHERE idp=$idp AND MONTH(`data`)=MONTH(now())-1 AND YEAR(`data`)=YEAR(now())");
всего записей с полем idp
"SELECT COUNT(*) FROM statistic WHERE idp=$idp");
 

Апельсин

Оранжевое создание
зачем возвращать все одним запросом, если эти запросы возвращают _разные_ данные.
В чем глубокий смысл?
 

troff

Новичок
Например, есть четыре таблицы, я считаю кол-во строк, отвечающих условию (WHERE idp=$idp).
"SELECT COUNT(*) FROM table1 WHERE idp=$idp";
"SELECT COUNT(*) FROM table2 WHERE idp=$idp";
"SELECT COUNT(*) FROM table3 WHERE idp=$idp";
"SELECT COUNT(*) FROM table4 WHERE idp=$idp";
И вот мне надо добавить еще и отбор по периоду:
текущий месяц, предыдущий месяц, всего.
Получается на каждую таблицу по 3 запроса, т.е. 4 таблицы по 3 запроса=12 запросов.
Я хочу оптимизировать именно запрос по периоду, чтобы не 12 запросов, а четыре.
П.С. пример с 4-мя таблицами и получаемыми данными упрощен.
 

Фанат

oncle terrible
Команда форума
делаешь свои запросы селектом
П.С. ответ упрощён
 

troff

Новичок
Сформулирую иначе: как это чудище упростить?
SELECT COUNT(*) FROM statistic WHERE idp=$_GET[idp] AND EXTRACT(YEAR_MONTH FROM `data`)=EXTRACT(YEAR_MONTH FROM now())
SELECT COUNT(*) FROM statistic WHERE idp=$_GET[idp] AND MONTH(`data`)=MONTH(now())-1 AND YEAR(`data`)=YEAR(now())
SELECT COUNT(*) FROM statistic WHERE idp=$_GET[idp]

SELECT COUNT(*), SUM(itogo) FROM zakaz WHERE idp=$_GET[idp] AND MONTH(`data`)=MONTH(now()) AND YEAR(`data`)=YEAR(now())
SELECT COUNT(*), SUM(itogo) FROM zakaz WHERE idp=$_GET[idp] AND MONTH(`data`)=MONTH(now())-1 AND YEAR(`data`)=YEAR(now())
SELECT COUNT(*), SUM(itogo) FROM zakaz WHERE idp=$_GET[idp]

SELECT COUNT(*), SUM(itogo), SUM(sumpart) FROM zakaz WHERE idp=$_GET[idp] AND datapay!='' AND MONTH(`data`)=MONTH(now()) AND YEAR(`data`)=YEAR(now())
SELECT COUNT(*), SUM(itogo), SUM(sumpart) FROM zakaz WHERE idp=$_GET[idp] AND datapay!='' AND MONTH(`data`)=MONTH(now())-1 AND YEAR(`data`)=YEAR(now())
SELECT COUNT(*), SUM(itogo), SUM(sumpart) FROM zakaz WHERE idp=$_GET[idp] AND datapay!=''
 

nagash

Guest
это ненадо упрощать...
только вот твою базу поломать будет просто =)
 

troff

Новичок
это ненадо упрощать...
только вот твою базу поломать будет просто =)
из-за $_GET[idp], да?
(хотя я ломать ее не собираюсь ;)) Это рабочий пример -потом заменю $_GET[idp] на $_SESSION[idp]
 
Сверху