2012-07-23 8 views
2

동일한 테이블에서 두 값을 비교하려고하고 차이가 있는지 확인하려고합니다. 는 지금, 나는 cms_statistics_pages 테이블에 1,485 레코드가 있지만, 아래의 쿼리 때 내 목적을 위해 정확하지MySQL은 같은 테이블에서 두 값을 비교합니다.

identifier     hits hits_yesterday growth 
index      13395 13395   0 
siden-er-under-opdatering 638  638    0 
vores-historie    0  3    0 

:

SELECT 
    cp.identifier, 
    COUNT(csp1.statID) AS hits, 
    COUNT(csp2.statID) AS hits_yesterday, 
    IF(COUNT(csp1.statID)>COUNT(csp2.statID),1,0) AS growth 
FROM cms_pages cp 
LEFT JOIN cms_statistics_pages csp1 
     ON csp1.pageID = cp.pageID 
     AND DATE(csp1.datetime) = '2012-07-20' 
LEFT JOIN cms_statistics_pages csp2 
     ON csp2.pageID = cp.pageID 
     AND DATE(csp2.datetime) = '2012-07-19' 
GROUP BY cp.identifier 

..is 해고, 나는이 결과를 얻을 수 . 그럼 내가 변경하는 경우 :

identifier     hits hits_yesterday growth 
index      0  141    0 
siden-er-under-opdatering 0  29    0 
vores-historie    0  3    0 

지금 히트가 올바른지, 그래서 ':

AND DATE(csp1.datetime) = '2012-07-20' 

레코드

일치하지 않습니다 날짜에 내 결과가 지금과 같은
AND DATE(csp1.datetime) = '2012-07-21' 

두 조인에 일부 데이터가 들어있을 때 쿼리가 레코드를 여러 번 계산하는지 궁금합니다. cms_pages에서

예 데이터 : cms_statistics_pages에서

 

    pageID sectionID templateID identifier default title exclude_title 
    1  1  1   index 1  Welcome to SiteTech Framework 2012 

예 데이터 :

 

    statID frontend backend  pageID sectionID panel datetime 
    1  0  1  34  6  admin 2012-07-17 12:34:14 

답변

0

그래서 나는 약간의 쿼리를 망쳐 놓았고, 왼쪽 조인과 서브 쿼리를 포함하는 솔루션을 발견했다. 내 쿼리는 지금과 같이 보인다 : 나에게이 올바른 결과! :

identifier     hits hits_yesterday growth 
index      95  141    0 
siden-er-under-opdatering 22  29    0 
vores-historie    NULL 3    0 
했다

SELECT 
    cp.identifier, 
    now.hits AS hits, 
    yd.hits AS hits_yesterday, 
    IF(now.hits>yd.hits,1,0) AS growth 
FROM cms_pages AS cp 
LEFT JOIN 
    (
     SELECT 
      pageID, 
      COUNT(pageID) AS hits 
     FROM cms_statistics_pages 
     WHERE DATE(datetime) = '2012-07-20' 
     GROUP BY pageID 
    ) now 
ON now.pageID = cp.pageID 
LEFT JOIN 
    (
     SELECT pageID, 
      COUNT(pageID) AS hits 
     FROM cms_statistics_pages 
     WHERE DATE(datetime) = '2012-07-19' 
     GROUP BY pageID 
    ) yd 
ON yd.pageID = cp.pageID 

0

내가 여러 테이블에 걸쳐 계산하는 더 진보 된 방법을 제공이 게시물에 건너 온이 쿼리를 방지 할 수 같은 기록을 여러 번 세는 것에서. 직접 시도하지 않았다. - https://discussion.dreamhost.com/thread-9112.html

관련 문제