2013-12-13 3 views
0

주요 문제는 발견 된 행을 곱하는 관계 부분의 'WHERE IN'부분입니다.count() 일대 다 관계가있는 페이지 매김

SELECT COUNT(*), 
GROUP_CONCAT(sections.name SEPARATOR '; ') 
FROM users 
LEFT JOIN users_sections ON (users.id = users_sections.user_id) 
LEFT JOIN sections ON (users_sections.section_id = sections.id) 
GROUP BY users.id 

Finds: 
'2', 'Registered; admins' 
'3', 'Registered; admins; dudes' 
'1', 'Registered' 

올바른 무엇인지 3 행,이 발견되지만, 결과는 쓸모가 : 무슨 무슨 내가 더 잘보기 위해 GROUP_CONCAT을 추가 예를 들어
.
지금 일부에서 WHERE를 추가

SELECT COUNT(*), 
GROUP_CONCAT(sections.name SEPARATOR '; ') 
FROM users 
LEFT JOIN users_sections ON (users.id = users_sections.user_id) 
LEFT JOIN sections ON (users_sections.section_id = sections.id) 
WHERE sections.id IN (2,3) 
GROUP BY users.id 

Finds: 
'2', 'Registered; admins' 
'2', 'Registered; admins' 
'1', 'Registered' 

에도 올바른하지만 쓸모. COUNT 결과로 하나의 '3'이 필요합니다.
다음 확인의 GROUP_CONCAT을 제거하고 ...

SELECT COUNT(*) 
FROM users 
LEFT JOIN users_sections ON (users.id = users_sections.user_id) 
LEFT JOIN sections ON (users_sections.section_id = sections.id) 
WHERE sections.id IN (2,3) 
GROUP BY users.id 

Find: 
'2' 
'2' 
'1' 

이전과 같은기도 할 수 있습니다. 다음을 시도해보십시오.

SELECT COUNT(*) > 0 
... 

Find: 
'1' 
'1' 
'1' 

안녕하세요. (잘하면 마지막) 그 시도하자 : 너무 슬퍼

SELECT SUM(COUNT(*) > 0) 
... 

Find: 
Invalid use of group function 

을 ...
가 어떻게 그의 개수를 얻을 수 있습니다, 아니면 불가능하다?

답변

2

내가하고 싶은 것 (정확하게 읽은 경우)은 특정 조건이 적용되는 별개의 사용자 ID를 계산합니다. 나는 진짜 질문을 꺼낼 수는 없지만, 당신이 다음과 같은 라인에서 그것을 필요로한다고 생각합니다 :

SELECT 
    COUNT(DISTINCT users.id) 
FROM 
    users 
    LEFT JOIN users_sections ON (users.id = users_sections.user_id) 
    LEFT JOIN sections ON (users_sections.section_id = sections.id) 
WHERE 
    sections.id IN (2,3) 
+0

영웅 !!! 그게 전부 야 !!! –

관련 문제