2011-08-23 25 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

相關問題