2011-08-23 26 views
2

好吧,我被困在一个问题上。将五张桌子连在一起

我有大约5个数据库表。一个表格包含一系列广告系列,另一个表格包含广告组列表,另一个表格包含广告列表,另一个表格包含点击列表,另一个表格包含潜在客户列表,另一个表格包含潜在客户列表状态。 每个表格还有其他栏目。例如,点击次数中包含ad_id和列帐户,并且潜在客户状态表包含潜在客户ID,买方和金额。每个表格都有一个ID与另一个表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 

我知道这是不是一个很好的解释,而我上面的查询并不好,但我对如何进行一个小卡住。任何人都可以帮助我指出正确的方向。编辑: 这是表格模式。

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 
+2

你可以发表你的表模式? –

+3

像%开头一样,通常是一个坏主意,因为它会阻止服务器使用索引。如果ic.create_date是数据类型,请使用例如在之间定义一个开始/结束。 –

+0

是什么问题? SQL查询看起来似乎有效,所以它有什么问题?根据您的描述,您可以轻松地将缺失的列添加到您的SELECT中。 – 2011-08-23 19:13:18

回答

2

是这样的吗?

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为datefields,使用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

相关问题