坚持使用SQL连接查询

时间:2010-09-09 20:59:24

标签: sql mysql join

我正在制作一个Q& A网站,类似于这个网站和雅虎的答案。我有3个表 - smf_members,qa_questions和qa_answers。

在这个查询中,我想从qa_questions中选择一些字段,从smf_members中选择几个字段,在question_id中选择ga_answers中的记录数。这样我就可以获得有关问题的一些基本信息,成员的一些基本信息以及答案数量。

这是我到目前为止生成的查询,它几乎可以正常工作,但不会返回没有答案的问题(即此问题的答案表中没有记录)。

SELECT qa_questions.question_id, 
       qa_questions.question_title, 
       qa_questions.question_content, 
       qa_questions.time_asked, 
       qa_questions.question_author, 
       qa_questions.votes, 
       qa_questions.views, 
       qa_questions.pretty_url, 
       smf_members.real_name, 
       smf_members.id_member, 
       COUNT(qa_answers.question_id) AS answers 
FROM   qa_questions, 
       qa_answers, 
       smf_members 
WHERE  qa_questions.deleted = 0 
       AND smf_members.id_member = qa_questions.question_author 
       AND qa_answers.question_id = qa_questions.question_id 
ORDER  BY qa_questions.time_asked DESC 
LIMIT  10

3 个答案:

答案 0 :(得分:7)

LEFT OUTER JOIN表格上使用qa_answers

SELECT q.question_id, 
    q.question_title, 
    q.question_content, 
    q.time_asked, 
    q.question_author, 
    q.votes, 
    q.views, 
    q.pretty_url, 
    m.real_name, 
    m.id_member, 
    COUNT(a.question_id) as answers 
FROM qa_questions q
inner join smf_members m on m.id_member = q.question_author 
left outer join qa_answers a on a.question_id = q.question_id 
WHERE q.deleted = 0 
ORDER BY q.time_asked DESC 
LIMIT 10 

答案 1 :(得分:2)

您需要GROUP BY子句对每个问题的答案数进行分组

...
GROUP BY q.question_id
LIMIT 10

答案 2 :(得分:0)

我之前的回答可能有所帮助,虽然它没有获得任何投票或被接受所以它可能毫无价值:P

MySQL Left Join with conditional