2011-11-23 6 views
2

내 쿼리는 다음과 같습니다 상태 = 아이디 DESC 여기에서다른 테이블에서 히트 SUM을 검색

BY '1'ORDER, 내 while 루프 내부에 나는이 사이트에서

SELECT * 활성화 된 모든 URL. 나는 다른 테이블 'hits '에있는이 URL을 검사하고, 활성화 된 각 사이트에 대한'통계 '의 합계를 얻고 싶습니다.

어떻게 수행 할 수 있습니까? 이것은 JOIN 문으로 수행됩니까?

테이블 구조

사이트

id int(11) unsigned NO PRI NULL auto_increment 
url varchar(100) NO UNI  
status int(11) YES  1 
added timestamp NO  CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP 

이 쿼리 안타

id int(11) unsigned NO PRI NULL auto_increment 
domain varchar(30) NO   
stats int(11) YES  NULL  
added timestamp NO  CURRENT_TIMESTAMP 
+2

두 테이블의 테이블 구조를 게시 할 수 있습니까? –

+0

테이블 구조로 내 질문을 편집했습니다. –

+0

어떻게 테이블이 관련이 있습니까? 'hits.domain'과 일치하도록'sites.url'을 파싱하려고하지 않기를 바랍니다. – Simon

답변

3
SELECT 
    A.id,COUNT(1) site_hits 
FROM 
    (SELECT id FROM sites WHERE status='1' ORDER BY id DESC) A 
    INNER JOIN 
    hits B ON A.id = B.site_id 
GROUP BY 
    A.id 
; 

주의 # 1 : 당신은이 일에 대한 좋은 지표가 필요합니다. 다음을 권장합니다.

ALTER TABLE sites ADD INDEX status_id_ndx (status,id); 

주의 할 점 : 색인을 더 효율적으로 만들 수 있습니다.

상태가 int (11)이면 2147483647 개의 가능한 상태 값을 수용 할 수 있습니다. 네가 그렇게 많이 생각하지 않는다. 상태 < 256의 가장 높은 값, 당신은 그것을 바꿀 수 있다면 다음과 같이

ALTER TABLE sites MODIFY COLUMN status int unsigned not null; 

결과? 테이블 크기가 작고 인덱스가 작으며 액세스 속도가 빠릅니다.

다음과 같은 것이 필요합니다. 귀하의 질문에 사이트와 조회수 사이에 상관 관계가 표시되지 않습니다. 조회수 표에 저장 될 사이트의 ID가 필요합니다. URL을 기준으로 도메인별로 가입하려는 경우 가입 방법을 명시해야합니다. 그 부분은 더러워 보일 것입니다. 그것은이 같은 유사한 것 : 올바른 궤도에

SELECT 
    A.id,COUNT(1) site_hits 
FROM 
    sites A,hits B 
WHERE 
    LOCATE(B.domain,A.url) 
GROUP BY 
    A.id 
; 
+0

따라서 도메인을 히트에 저장하는 대신 사이트 테이블에서 도메인 (일명 URL)의 ID를 저장한다고 말하고 있습니까? –

+0

사이트의 ID가 조회수가되는 도메인과 일치하는 한 예. 그럼 첫 번째 쿼리는 당신을 위해, – RolandoMySQLDBA

+0

당신의 응답을 주셔서 감사합니다 Rolando, 매우 도움이!나는 지금 그것을 이해하고 있다고 믿는다. –

0

롤란도의,하지만 당신은 더 이런 일을 할 것 통계를 요약하기 : 당신이 활성화되어 있지만이 사이트를하려는 경우

select sites.id, sites.url, sum(hits.stats) 
from sites 
join hits on sites.url = hits.domain 
where sites.status = 1 
group by sites.id, sites.url 

조회수가 없으면 joinleft join으로 설정하십시오.

+0

감사합니다. 합계가 누락 된 것을 알지 못했습니다. 응답. 그래서 이것은 URL과 도메인 필드를 ID 방식으로하는 대신 정확하게 일치시키는 것입니다. 사이먼 감사합니다! –

관련 문제