2012-05-13 2 views
0

3 개의 테이블을 사용하고 있습니다. 첫 번째 표에는 고객의 질문이 기록되어 있습니다. 두 번째 테이블에서 3 개의 테이블을 사용하는 Mysql 조인 쿼리

customer_id | question | question_id 
---------------------------------------------- 
     58  | question 4 |  4 
     41  | question 5 |  5 
     37  | question 3 |  3 

세 번째 테이블의 첫 번째 teble입니다

comment | question_id | user 
--------------------------------------- 
    comment 1 |  4  | 41 
    comment 2 |  5  | 58   
    comment 3 |  4  | 41 
    comment 4 |  5  | 58 
    comment 5 |  3  | 23 

에서 질문에 대한 관련 의견을 기록하면이 사이트의 사용자에 대한 데이터를 위치

user  | status 
-------------------------------- 
    58  |  1 
    41  |  1 
    37  |  0 
    23  |  0 

어떻게 question_id로 분류 된 마지막 다섯 개의 질문과 각 질문과 관련된 총 코멘트 수의 목록으로 결과가 나오는 질의를합니다. 이 질문 및 의견은 상태가 "1"인 사용자 만 세 번째 테이블이 될 수 있습니다. 이 예에서

결과는 같아야합니다 : 그것에

question | total comments | user 
----------------------------------------------- 
question 5 |  2   | 41 
question 4 |  2   | 58  

답변

1

나는,이 올바른지 합리적으로 확신 '을 유효성을 검사 할 데이터가 있습니다.

SELECT questions.question, 
     count(comments.question_id) as 'total comments', 
     user.user 
FROM user 
    JOIN questions on user.user = questions.customer_id 
    LEFT JOIN comments on questions.question_id = comments.question_id 
WHERE user.status = 1 
GROUP BY comments.question_id, questions.question, users.user 
ORDER BY questions.question 
LIMIT 5 

LEFT (왼쪽)

는 댓글이 그들에 남아 있지 않은 경우에도 문제가 표시 될 수 있습니다 질문에 가입하세요.

궁금한 점이 있으면 알려주세요.

+0

null 값이 포함되지 않습니다. 결과적으로 질문 열에 NULL이 표시됩니다. – Sergio

+0

위의 질문에서 정확한 표를 사용하고 있습니까? –

+0

미안 케빈. 나는 당신의 쿼리를 테스트 할 때 적절한 컬럼 이름을 넣지 않았다. 이번에는 올바르게 테스트했으며 주석 테이블에서 null 값을 계산하지 않습니다. 이 쿼리는 주석이있는 질문의 주석만을 집계합니다. 코멘트가없는 질문은 포함되지 않았습니다. – Sergio

0

빠른 모양과 나는이 할 것이다 : 나는 돈 불구하고

SELECT q.question_id, count(c.comment) from questions as q left join 
comments as c on q.question_id=c.question_id left join user as u on 
c.user=u.user where u.status=1 group by q.question_id 
+0

@ cb0- 결과 테이블에 – Sergio

0
SELECT question, count(*) as total_comments, T1.user 
FROM T1, T2, T3 
WHERE T1.customer_id = T3.user 
    AND T3.status = 1, 
    AND T1.question_id = T2.question_id 
GROUP BY T2.user 
ORDER BY question_id DESC 
LIMIT 5 

T1, T2, T3은 제시된 순서대로 문제의 테이블입니다.

0
SELECT  question_id as question, count(c.comment) as 'total comments', q.customer_id as user 
FROM  (SELECT * 
      FROM question 
      ORDER BY question_id DESC 
      LIMIT 5) as q LEFT JOIN 
      comment as c using(question_id) LEFT JOIN 
      user as u using(user) 
WHERE  u.status=1 
GROUP BY q.question_id 
ORDER BY question_id DESC 
관련 문제