Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: нужна помощб в оптимизации LEFT JOIN
$sqlSales ="SELECT COUNT(vicidial_campaign_statuses.status) FROM vicidial_agent_log LEFT JOIN vicidial_campaign_statuses ON vicidial_campaign_statuses.status = vicidial_agent_log.status and vicidial_campaign_statuses.campaign_id = vicidial_agent_log.campaign_id WHERE date(vicidial_agent_log.event_time) = '$runDate' AND vicidial_agent_log.campaign_id IN $allQueues AND sale = 'Y' AND vicidial_campaign_statuses.campaign_id IN $allQueues";
}
else IF($queue =='AllOmaha'){
$sqlSales ="SELECT COUNT(vicidial_campaign_statuses.status) FROM vicidial_agent_log LEFT JOIN vicidial_campaign_statuses ON vicidial_campaign_statuses.status = vicidial_agent_log.status and vicidial_campaign_statuses.campaign_id = vicidial_agent_log.campaign_id WHERE date(vicidial_agent_log.event_time) = '$runDate' AND vicidial_agent_log.campaign_id IN $allOmaha AND sale = 'Y' AND vicidial_campaign_statuses.campaign_id IN $allOmaha";
}
else {
$sqlSales ="SELECT COUNT(vicidial_campaign_statuses.status) FROM vicidial_agent_log LEFT JOIN vicidial_campaign_statuses ON vicidial_campaign_statuses.status = vicidial_agent_log.status and vicidial_campaign_statuses.campaign_id = vicidial_agent_log.campaign_id WHERE date(vicidial_agent_log.event_time) = '$runDate' AND vicidial_agent_log.campaign_id = '$queue' AND sale = 'Y' AND vicidial_campaign_statuses.campaign_id = '$queue'";
}
//echo $sqlSales;
$resultSales= mysql_query($sqlSales, $link);
$resultValue = mysql_fetch_row($resultSales);
$metricsResult[$queue]['Sales']= $resultValue[0];
знаю выглялит громоздко,но так пока легче.
MiksIr
Отправлено: 20 Октября, 2014 - 18:24:23
Забанен
Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014
Помог: 10 раз(а)
[+]
А зачем у вас условие и по vicidial_agent_log.campaign_id и по vicidial_campaign_statuses.campa ign_id
Еще можно попробовать поменять таблицы местами и сделать INNER JOIN.
А так - сложно судить не зная схему данных и что там для чего.
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
не хочу даже пытаться понять что там написано в сплошном куске запроса
совет на будущее и отредактируйте сейчас сообщение чтобы запросы выглядели следующим образом
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Какого именно запроса?
Разумеется, написать схемы таблиц. Добавить смысл запроса и вывод explain'а.
Сходу очевидно, что left join тут лишь по глупости. count считает только не NULL-значения, результат идентичен inner join.
----- PostgreSQL DBA
tonyio
Отправлено: 21 Октября, 2014 - 16:15:09
Новичок
Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2014
Помог: 0 раз(а)
SOLVED
Мелкий пишет:
Какого именно запроса?
Разумеется, написать схемы таблиц. Добавить смысл запроса и вывод explain'а.
Сходу очевидно, что left join тут лишь по глупости. count считает только не NULL-значения, результат идентичен inner join.
ты конечно прав! и я переделал - сделал дополнительный view и назвал его criusDashboard1 чтобы удобней было, но на время исполнения это не особо повлияло,и теперь пытаюсь сократить не делая дополнительный запрос на AllBrands а пытаюсь его получить сложением из array
AllBrands это общая сумма для всех компаний(в будующем добавлю более) но раньше сумма добывалась из базы, а теперь для экономии пытаюсь посчитать наместе.
все заработало! Прикреплено изображение (Нажмите для увеличения)
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.