2013-05-01 2 views
0

에서 서로 다른 선택는 어떻게 다음과 같은 구조의 테이블을 하나 개의 테이블

view_id | user_agent | view_date | post_id | user_id 

내가 그러나 특정 사용자가 더 이상 특정 기사를 읽으면, 각 게시물에 대한 뷰 카운트를하고 싶으면 일단 여전히 조회수로 간주됩니다.

지금까지 나는이 간단한 쿼리는 오늘 각 개별 사용자에 대한 조회수가 수를 반환 그러나

SELECT member_id, COUNT(member_id) AS view_count 
FROM gw_library_viewcount 
WHERE DATE(view_date) = DATE_SUB(DATE(NOW()), INTERVAL 0 DAY) 
GROUP BY member_id; 

와 함께 올라와있다. 이

SELECT COUNT(member_id) AS view_count 
FROM gw_library_viewcount 
WHERE DATE(view_date) = DATE_SUB(DATE(NOW()), INTERVAL 0 DAY) 

쿼리가 VIEW_COUNT의 총 수를 반환 이번에가되도록 그럼, 그러나 그것은 여러 조회수를 포함하여 편집 할 수 있습니다. 각 게시물에 대한 조회수를 반환하려면 기사를 두 번 이상 보는 사용자가 있으면 하나의 조회수로 간주됩니다.

어떻게하면이 결과를 얻을 수 있습니까?

건배

당신은 독특한 포스트 뷰,이 같은 선택 하위 쿼리를 사용할 수

답변

1

:

SELECT post_id, COUNT(member_id) AS view_count 
FROM (
    SELECT DISTINCT member_id, post_id, MAX(view_date) AS view_date 
    FROM gw_library_viewcount 
    GROUP BY member_id, post_id 
) t 
WHERE DATE(view_date) = DATE_SUB(DATE(NOW()), INTERVAL 0 DAY) 
GROUP BY post_id 

편집 : 하위 쿼리에서 MAX (view_date)에 의해 제거 비 sensical 그룹 영업 이익에 기반을 피드백

+0

안녕하세요, 답변 해 주셔서 감사합니다. 난 당신의 쿼리를 시도 (잘 거의) 나는 그것을 "MAX (view_date)"group_by 제거하여 조금 수정했다. – Jeremy

+0

기꺼이 도와 드리겠습니다. 나는 대답을 수정했습니다. – gareththegeek

2

시도 COUNT(DISTINCT member_id). 이다

, :

SELECT COUNT(DISTINCT user_id) FROM gw_library_viewcount WHERE ... GROUP BY post_id; 

주, 당신은 귀하의 질문에 상호 교환을 사용했기 때문에 그것이 member_id 또는 user_id해야합니다 있는지 확실하지 않습니다. 예 : Using DISTINCT and COUNT together in a MySQL Query.

+0

제 잘못, member_id라고 생각합니다. – Jeremy

+0

+1 선택 목록에'post_id'를 포함시켜야합니다. –

0

gareththegeek 덕분에 그의 대답을 조금 수정하면 해결할 수 있습니다. 이것은 제가 찾고있는 쿼리입니다.

하위 쿼리는 기본적으로 각 구성원이

은 그래서이 같은 결과를 반환합니다 (여러 방문 읽기/여전히 하나로 계산) 특정 일에 대한 읽기 어떤 기사 보여주는 것입니다

:

member id | post id | view_date 
1 ---------> 1 ------> some_date 
1 ---------> 2 ------> some_date 
3 ---------> 1 ------> some_date 

등 에 ....

여기에서, 나는 단순히 사용자의 수를 센다. 어쨌든이게 지금까지 일하는 것 같아요. 소정의 간격은 1 (어제 나타내는)이 부정확 한 결과를 제공 등의 다른 값으로 시험 할 때 0 인 경우

SELECT COUNT(member_id) AS view_count 
FROM (
    SELECT DISTINCT member_id, post_id, MAX(view_date) AS view_date 
    FROM gw_library_viewcount 
    WHERE DATE(view_date) = DATE_SUB(DATE(NOW()), INTERVAL 0 DAY) 
    GROUP BY member_id, post_id 
) AS subquery 

*

쿼리 결과 이전 쿼리 아래에만 유효 나온다.

SELECT post_id, COUNT(member_id) AS view_count 
FROM (
    SELECT DISTINCT member_id, post_id, MAX(view_date) AS view_date 
    FROM gw_library_viewcount 
    GROUP BY member_id, post_id 
) t 
WHERE DATE(view_date) = DATE_SUB(DATE(NOW()), INTERVAL 0 DAY) 
GROUP BY post_id 
관련 문제