[英]Sql join query and select one more column
我有三个表: 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
表。 该表基本上存储赞成,反对用户回答的反对。
如果用户已批准答案,即answer_id
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
值(用于其表)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.