我正在制作一个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
答案 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