Запрос соединения Sql и выберите еще один столбец

0

У меня есть три таблицы: 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

когда пользователь регистрируется в нем, он должен уметь видеть, есть ли у него ответ или нет ответа или нет.

  • 0
    ты не задавал этот вопрос уже?
  • 0
    извини, сказали написать так. отправил снова, потому что не мог заставить это работать
Теги:

1 ответ

0
Лучший ответ

Учитывая, что данный пользователь может голосовать только один раз за любой ответ, это должно сделать трюк:

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 (для его таблицы), если это не так.

  • 0
    Спасибо, скажем, пользователь с идентификатором 5, который вошел в систему. Где бы я написать эту логику
  • 0
    показывая ноль в каждой строке. хотя пользователь проголосовал
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню