Пишу аналитику по словам в системе, удалось подсчитать количество заходов по словам. Но есть пару проблем:
1) Нужно отбрасывать / в конце слова, например есть статистика по слову новогодняя елка и новогодняя елка/ нужно подсчитать их в месте и вывести. Как это учесть при выборке?
2) Как в базе подсчитать количество лидов, которые попали по этим словам. При посещении посетителю подставляется hash_person, он записывает с данными utm меток в базу stat, когда клиент оставляет заявку hash_person записывается с контактными данными в базу lids. Как вывести в таблицу количество лидов например по слову "новогодняя елка"?
Скрин того что получилось:
Код:
$source_p = mysql_query("
SELECT
`utm_term`, COUNT(`utm_term`) AS `cnt`
FROM
`stat`
WHERE
id_cabinet = '$id_cabinet' $filtr_date
GROUP BY
`utm_term`");
if (mysql_num_rows($source_p) > 0) {
while ($source_c = mysql_fetch_array($source_p)) {
if ($source_c['utm_term'] !== '') {
$title_source = $source_c['utm_term'];
} else {
$title_source = "Нет данных";
}
// попытка подсчитать количество лидов по фразе
$result_stat_leads = mysql_query("SELECT * FROM stat WHERE utm_term = '".$source_c['utm_term']."'" ,$db);
while ($stat_leads = mysql_fetch_array($result_stat_leads)) {
$result_count_leads = mysql_query("SELECT * FROM lids WHERE hash_person = '".$stat_leads['hash_person']."'" ,$db);
while ($count_stat_leads = mysql_fetch_array($result_count_leads)) {
$count_leads = ""; // количество лидов
}
}
$count_view = $source_c['cnt']; // количество заходов на сайт по фразе
echo "Слово: $title_source | Лидов: $count_leads";
}
Структура таблиц:
--
-- Структура таблицы `lids`
--
CREATE TABLE IF NOT EXISTS `lids` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`id_cabinet` int(11) NOT NULL,
`id_staff` int(10) NOT NULL,
`hash_person` varchar(100) NOT NULL,
`name` text NOT NULL,
`tel` text NOT NULL,
`email` text NOT NULL,
`information` text NOT NULL,
`comment` text NOT NULL,
`address` text NOT NULL,
`note` text NOT NULL,
`datetime` datetime NOT NULL,
`date_last_edit` datetime NOT NULL,
`source` text NOT NULL,
`add_vid` text NOT NULL,
`idform` int(10) NOT NULL,
`id_type` int(10) NOT NULL,
`hash` varchar(32) NOT NULL,
`status_old` int(10) NOT NULL,
`status` int(15) NOT NULL,
`delete_status` int(11) NOT NULL,
`status_view` int(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=35997 ;
--
-- Структура таблицы `stat`
--
CREATE TABLE IF NOT EXISTS `stat` (
`id` int(100) NOT NULL AUTO_INCREMENT,
`id_cabinet` int(11) NOT NULL,
`hash_person` varchar(35) NOT NULL COMMENT 'id зашедшего на сайт',
`number_visit` int(11) NOT NULL COMMENT 'Номер визита',
`id_lead` int(10) NOT NULL,
`referrer_site` varchar(255) NOT NULL,
`site_project` varchar(255) NOT NULL,
`page_site_project` varchar(300) NOT NULL,
`title_page` varchar(255) NOT NULL,
`country` varchar(100) NOT NULL,
`region` varchar(100) NOT NULL,
`city` varchar(100) NOT NULL,
`utm_source` text NOT NULL COMMENT 'обозначает источник рекламного трафика (Google, Яндекс, Email, Blog)',
`utm_medium` text NOT NULL COMMENT 'определяет тип маркетингового канала (PPC, КМС, ретаргетинг, рассылка, пост)',
`utm_campaign` text NOT NULL COMMENT 'соответствует названию маркетинговой кампании или рекламному объявлению или местоположению баннера',
`utm_term` text NOT NULL COMMENT 'параметр, содержащий в себе ключевое слово PPC кампании',
`utm_content` text NOT NULL COMMENT 'отображает контент объявления, что помогает различать разные рекламные объявления, содержащие одно и то же ключевое слово. ',
`utm_block` text NOT NULL COMMENT 'Тип площадки: premium – спецразмещение other – блок внизу none – блок не на поиске Яндекса',
`utm_position` text NOT NULL COMMENT 'Позиция в рекламном блоке',
`utm_ad` text NOT NULL COMMENT 'Номер (ID) объявления',
`utm_phrase` text NOT NULL COMMENT 'Номер (ID) ключевой фразы',
`yclid` varchar(100) NOT NULL COMMENT 'Идентификатор яндекса',
`datetime` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=251420 ;
Я запутался и не понимаю как дальше делать =/
Ответ
Решил проблему по совету @mike поставив индексы к обрабатываемым столбцам. Ну и сам запрос собственно улучшил и усложнил.
select ST.utm_term, ST.hash_person, COUNT(ST.utm_term) AS `stat_count`, count(distinct L.id) AS `lids_count`, count(distinct LL.id) AS `clients_count`
FROM stat ST
left join lids L on L.hash_person=ST.hash_person and L.id_cabinet = '$id_cabinet' $filtr_date_l and L.delete_status='0'
left join leads_sort LS on LS.id_cabinet = $id_cabinet and LS.url = 'done'
left join status S on LS.id_parameter = S.leadssort and S.id_cabinet = $id_cabinet
left join lids LL on S.id = LL.status and LL.hash_person = ST.hash_person and L.id_cabinet = '$id_cabinet' $filtr_date_ll and LL.delete_status = '0'
WHERE ST.id_cabinet=$id_cabinet $filtr_date_st
GROUP BY
`utm_term`
ORDER BY
`clients_count`
DESC
И так, запрос считает 1е- сколько посетителей по данному ключевику, 2е - считает количество лидов по ключевику, 3е - считает сколько клиентов (в деньги) по определенному ключу.
Спасибо всем кто помог.
Комментариев нет:
Отправить комментарий