Объединение пяти столов - PullRequest
       5

Объединение пяти столов

2 голосов
/ 23 августа 2011

Хорошо, я застрял в проблеме.

У меня около 5 таблиц базы данных. В одной таблице есть список кампаний, в другой - список групп объявлений, в другой - список объявлений, в другой - список кликов, в другой - список потенциальных клиентов, а в другой - список потенциальных клиентов. Каждая таблица также имеет другие столбцы. Например, в кликах есть аккаунт ad_id и столбец, а в таблице статусов потенциальных клиентов - идентификатор клиента, покупатель и сумма. В каждой таблице столбец с идентификатором, связанным с другим идентификатором таблицы.

Итак, я пытаюсь получить мои данные в следующем формате

campaign   keyword   count(keyword)   sum(amount)   buyer
bing-auto  rap        15                45           david
google-auto honda     10                30           chris

По сути, это каждое успешное лидерство, сгруппированное по ключевым словам и кампании.

Однако я не могу решить эту проблему.

SELECT keyword, COUNT(keyword) FROM in_clicks AS ic
       INNER JOIN ads AS a ON ic.ad_id = a.id
       INNER JOIN ad_groups AS ag ON a.ad_group_id = ag.id
       INNER JOIN campaigns AS c ON ag.campaign_id = c.id;
       INNER JOIN lead_status AS ls ON l.id = ls.id
       INNER JOIN leads AS l ON ic.in_click_id = l.id  
WHERE ic.create_date LIKE '%2011-08-19%' AND ic.location NOT LIKE '%Littleton%'
GROUP BY ic.keyword ORDER BY COUNT(ic.keyword) DESC

Я знаю, что это не очень хорошее объяснение, и мой вышеупомянутый запрос не очень хорош, но я немного застрял в том, как действовать. Может ли кто-нибудь помочь направить меня в правильном направлении.

EDIT: Вот схема таблицы.

CAMPAIGN
id   name   trafficsource   createdate
20   hip hop   bing           2001-08-16
21   rap       bing           2001-08-18

AD GROUPS
id    name    campaignid    createdate
15    jayz      20            2001-08-16  
16    eminem    21            2001-08-18

ADS
id   headline   adgroupid
13   cool is cool   15
14   wow, great     16

IN CLICKS
id   keyword    adid   createdate
205  his name    13      2001-08-16
206  whoa        14      2001-08-18

LEADS
id   in_click_id    create_date
300    205           2001-08-16   
301    206           2001-08-18

LEAD STATUS
id    lead_id    success   amount   buyer
501    300         0        5        jack
502    300         1        15       jill

1 Ответ

2 голосов
/ 23 августа 2011

Как то так?

SELECT 
  c.name as campaign
  , ic.keyword
  , count(ic.keyword) as keycount
  , sum(ls.amount) as total_amount
  , group_concat(ls.buyer) as buyers
FROM in_click ic 
INNER JOIN ads AS a ON (ic.ad_id = a.id)
INNER JOIN ad_groups AS ag ON (a.ad_group_id = ag.id)
INNER JOIN campaigns AS c ON (ag.campaign_id = c.id)
INNER JOIN lead_status AS ls ON (l.id = ls.id)
INNER JOIN leads AS l ON (ic.in_click_id = l.id)
WHERE ic.create_date BETWEEN 2011-08-01 and 2011-08-31
      AND ic.location NOT LIKE 'test%'
GROUP BY ic.keyword
ORDER BY keycount

Примечания
Не используйте LIKE для полей даты, используйте BETWEEN startdate AND enddate.
Если вы используете LIKE %...., вы не сможете использовать индекс.
Попробуйте использовать LIKE cghxgs%, чтобы вы могли использовать индекс.
Если вам нужно сопоставить текстовые индексы, используйте полнотекстовые индексы с синтаксисом MATCH AGAINST.
Однако это будет работать только для таблиц MyISAM ....

Ссылки:
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between
http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html#function_match
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...