Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: построить таблицу по данным из разных таблиц, с вычислениями
 
 автор: mindochin   (02.05.2015 в 17:50)   письмо автору
 
 

есть 3 таблицы - заявки (дата, сумма, продано) , рекламные компании (номер кампании) и статистика по компаниям (дата, показы, клики, расход). нужно составить запрос, который выбирает в разрезе по дате данные из заявок (сколько всего, сколько оплачено, конверсия и т.д.) и рекламы (клики и т.д.). таблицы связаны по номеру рекламной кампании. то в итоге примерно такая таблица:
Дата | Показы | Клики | CTR Заявки | Конверсия Заявки, % | Продажи | Конверсия Продажи, % | Сумма заказано | Сумма отправлено | Средняя сумма в день | Расход на компании

сейчас сделано так - к статистике джойнится компания и далее в цикле строится таблица с кучей запросов в столбцах. это неправильно и непроизводительно. нужно именно в разрезе по датам свести и подсчитать рекламу и заявки по ней. кампании и заявки еще делятся на сегменты по типу продаваемых товаров (типа пшеница, рожь, тракторы и т.д.) как грамотно это сделать?

  Ответить  
 
 автор: Мимовася   (20.05.2015 в 14:14)
 
   для: mindochin   (02.05.2015 в 17:50)
 

1. Определить интервал времени, по которому нужно собрать статистику
2.1. Построить запрос, выбирающий всю информацию по заявкам на интервал времени
2.2. Построить запрос, выбирающий всю информацию по кампаниям на интервал времени
3. Записать результат каждого запроса во временные таблицы:
CREATE TEMPORARY TABLE IF NOT EXISTS query1_result AS (SELECT дата, другие поля... FROM заявки);

CREATE TEMPORARY TABLE IF NOT EXISTS query2_result AS (SELECT дата, другие поля... FROM кампании JOIN статистика кампании ...);

4. Выполнить FULL OUTER JOIN между этими таблицами, связывая их по дате. В MySQL такой тип соединения не поддерживается, но его можно имитировать.
Примерный запрос:
SELECT query1_result.date, query1_result.*, query2_result.* FROM query1_result LEFT JOIN query2_result
      ON query1_result.date = query2_result.date
UNION ALL
SELECT query2_result.date, NULL, NULL, NULL, query2_result.* FROM query2_result
WHERE NOT EXISTS (SELECT 1 FROM query1_result WHERE query1_result.date = query2_result.date);

5. Удалить временные таблицы
DROP TEMPORARY TABLE query1_result, query2_result;

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования