2010-12-08 2 views
0
$sSql = "SELECT COUNT(DISTINCT `tsu`.`id`) AS `count` 
     FROM `" . $this->_sPrefix . "users` AS `tsu` 
     INNER JOIN `" . $this->_sPrefix . "entries` AS `tse` 
      ON `tsu`.`id`=`tse`.`subscriber_id` 
       AND `tse`.`subscriber_type`='" . BX_DOL_SBS_TYPE_VISITOR . "' 
     WHERE 1 
     GROUP BY `tsu`.`id` 
     LIMIT 1"; 

항목을 계산하는 대신 1을 반환합니다. 그룹 BY 절을 제거하면 작동합니다. GROUP BY를 개선하여 더 잘 작동하도록하려면 어떻게해야합니까?GROUP BY가 작동하지 않습니다.

+1

"COUNT"에 무엇을 넣으려고하십니까? 특정 사용자 ID에 대해 얼마나 많은 가입자가 있습니까? – DRapp

+0

ID가 서로 다른 두 테이블에서 일치합니다. – tmartin314

+0

저는 mysql 전문가가 아니지만 "LIMIT 1"은 매우 의심 스럽습니다. – TToni

답변

4

WHERE 1은 아무 작업도 수행하지 않으므로 제거 할 수 있습니다.

GROUP BY도 그룹화하지 않기 때문에 제거 할 수 있습니다. COUNT DISTINCT은 전체 테이블에 있습니다. 아니요?

오블링이 가리키는 것처럼 COUNT DISTINCT은 정의에 의해 하나의 값만 반환하기 때문에 LIMIT 1도 제거 할 수 있습니다.

그러면 원하는 것을 할 수 있습니까?

+1

'LIMIT'도 가능합니다. – Orbling

+0

+1 이것이 OP가 필요로하는 것입니다. –

1

그룹화 중은 tsu입니다. id.

각 개인 tsu. id 그룹은 정의에 따라 하나만 구별됩니다 tsu. 그룹의 id 반환 할 것으로 예상되는 항목은 무엇입니까?

+0

실제 항목 수 : 23 – tmartin314

+0

예, 'WHERE','GROUP BY' 및 'LIMIT'이 가능합니다. – Orbling

+0

@whatshakin @ littlegreen의 대답을 참조하십시오. –

0
SELECT u.id, COUNT(e.id) 
FROM users AS u 
INNER JOIN entries AS e ON e.subscriber_id = u.id 
WHERE e.subscriber_type = 'BX_DOL_SBS_TYPE_VISITOR' 
GROUP BY u.id 
관련 문제