2011-08-23 5 views
2

좋아, 나는 문제에 붙어있다.5 개의 테이블을 합치는 것

약 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에 추가 할 수 있습니다. –

답변

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 


BETWEEN startdate AND enddate를 사용 datefields에 대한 LIKE를 사용하지 마십시오 비고.
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

관련 문제