Застрял с запросом на соединение SQL - PullRequest
1 голос
/ 10 сентября 2010

Я делаю сайт вопросов и ответов, похожий на этот сайт, и Yahoo отвечает.У меня есть 3 таблицы - smf_members, qa_questions и qa_answers.

В этом запросе я хочу выбрать несколько полей из qa_questions, несколько полей из smf_members и количество записей в ga_answers для question_id.Это позволяет мне получить некоторую базовую информацию по этому вопросу, некоторую базовую информацию о члене и количестве ответов.

Это запрос, который я создал до сих пор, и он почти работает, но не работает.t вернуть вопросы, на которые нет ответов (т. е. нет записей в таблице ответов для этого question_id).

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 ]

7 голосов
/ 10 сентября 2010

Используйте 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 
2 голосов
/ 10 сентября 2010

Вам нужно предложение GROUP BY, чтобы сгруппировать количество ответов на вопрос

...
GROUP BY q.question_id
LIMIT 10
0 голосов
/ 10 сентября 2010

Мой предыдущий ответ мог бы помочь, хотя он не набрал ни одного голоса или принял его, так что он, вероятно, бесполезен: P

MySQL Left Join с условным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...