2012-04-29 2 views
4

나는 COUNT() 메서드를 사용하여 uid의 u.id를 가진 두 테이블의 행을 확인합니다. 잘못된 행 수를 반환하는 COUNT()

내가 아래의 방법을 사용하고, 이렇게하려면 : 나는 위의 쿼리를 실행할 때

SELECT u.id, u.first_name, u.last_name, u.email, u.username, COUNT(q.uid) AS `q_count`, COUNT(a.uid) AS `a_count` 
FROM `users` AS u 
INNER JOIN `questions` AS q ON u.id = q.uid 
INNER JOIN `answers` AS a ON u.id = a.uid 
WHERE u.username = 'admin' 

그러나, 두 번째 수는 첫 번째 계수에 대한 행의 수가 동일한 행 수를 반환합니다. 두 번째 테이블은 questions 테이블에 두 개의 행이 있고 answers 테이블에 하나의 행이있을 때 두 번째 테이블도 첫 번째 테이블에서 두 번째 테이블이 반환되는 것을 알고 있습니다.

어디에서 잘못 될지 알려주실 수 있습니까?

감사


의 샘플 내가 받고 오전 : answers에서 http://d.pr/i/vcnJ

샘플 데이터 : questions에서 http://d.pr/i/TMkU

샘플 데이터 : http://d.pr/i/tuwU

답변

1

나는 이유는 당신이이 일에 함께 결과를 가입 할, 가입하고있는 것으로 믿고있다. 대신 동일한 쿼리를 사용하고 SELECT *을 사용하면 왜 이런 일이 발생하는지 알 수 있습니다. 당신이 그것을 할 수있는 더 좋은 방법을 추천 해주십시오 수

SELECT u.id, u.first_name, u.last_name, u.email, u.username, COUNT(DISTINCT q.id) AS `q_count`, COUNT(DISTINCT a.id) AS `a_count` 
FROM `users` AS u 
INNER JOIN `questions` AS q ON u.id = q.uid 
INNER JOIN `answers` AS a ON u.id = a.uid 
WHERE u.username = 'admin' 
0

당신은 셀 수 없다 하나의 쿼리에서 두 개의 테이블. COUNT()은 특정 값이 아닌 행을 계산합니다. 당신이 그러나 할 수있는 일

SELECT u.id, u.first_name, u.last_name, u.email, u.username, 
SUM(CASE WHEN q.uid IS NULL THEN 0 ELSE 1 END) AS `q_count`, 
SUM(CASE WHEN a.uid IS NULL THEN 0 ELSE 1 END) AS `a_count` 
FROM `users` AS u 
LEFT JOIN `questions` AS q ON u.id = q.uid 
LEFT JOIN `answers` AS a ON u.id = a.uid 
WHERE u.username = 'admin' 
+0

감사합니다, 또는 그냥 두 개의 개별 쿼리를 실행해야합니다

이 시도? 하나는'users'와'count()'중 하나에서 데이터를 검색하고, 다른 하나는 두 번째 조사를 검색하는 것입니다. –

+0

제공된 코드를 보내 주셔서 감사합니다.하지만 질문에서 제공 한 쿼리와 동일한 'count()'결과를 반환합니다. –

+0

@max_ 샘플 데이터를 제공 할 수 있습니까? – fancyPants

관련 문제