У меня есть три таблицы: answers
, questions
и users
и я присоединился к ним, чтобы получить результат, который я хочу
SELECT answers.answer_content as answer_content,
answers.id as answer_id,
answers.created_at as created_at,
questions.id as question_id,
questions.question_title as question_title,
questions.question_slug as question_slug,
users.id as user_id,
users.name as user_name,
users.user_slug as user_slug,
FROM answers
JOIN questions
on questions.id = answers.question_id
JOIN users
on users.id = answers.user_id
WHERE questions.question_active = 1 and
answers.answer_active = 1
И теперь у меня есть еще одна таблица с именем upvote_answers
. Эта таблица в основном сохраняет upvote, downvote для ответа пользователя.
если пользователь имеет ответ, то есть столбцы user_id
, answer_id
, upvote
(1 или 0 - upvote или downvote соответственно)
Поэтому мой вопрос: я хочу получить еще один столбец с логическим результатом, который должен показывать вверх или вниз или ничего для каждого ответа для текущего зарегистрированного пользователя
Я попытался написать запрос, как это
SELECT answers.answer_content as answer_content,
answers.id as answer_id,
answers.created_at as created_at,
questions.id as question_id,
questions.question_title as question_title,
questions.question_slug as question_slug,
users.id as user_id,
users.name as user_name,
users.user_slug as user_slug,
(SELECT count(upvote_answers.answer_id) from upvote_answers, answers WHERE upvote_answers.user_id = 2 and answers.id = upvote_answers.answer_id) as upvotedOrNot
FROM answers
JOIN questions
on questions.id = answers.question_id
JOIN users
on users.id = answers.user_id
WHERE questions.question_active = 1 and
answers.answer_active = 1
когда пользователь регистрируется в нем, он должен уметь видеть, есть ли у него ответ или нет ответа или нет.
Учитывая, что данный пользователь может голосовать только один раз за любой ответ, это должно сделать трюк:
SELECT answers.answer_content as answer_content,
answers.id as answer_id,
answers.created_at as created_at,
questions.id as question_id,
questions.question_title as question_title,
questions.question_slug as question_slug,
users.id as user_id,
users.name as user_name,
users.user_slug as user_slug,
upvote_answers.upvote as upvote
FROM
answers
JOIN questions on questions.id = answers.question_id
JOIN users on users.id = answers.user_id
LEFT JOIN upvote_answers ON
upvote_answers.answer_id = answers.id AND
upvote_answers.user_id = answers.user_id
WHERE
questions.question_active = 1 and
answers.answer_active = 1
Предложение LEFT JOIN
даст результаты, если оно соответствует, но приведёт значения NULL
(для его таблицы), если это не так.