繁体   English   中英

SQL连接查询并选择另外一列

[英]Sql join query and select one more column

我有三个表: answersquestionsusers ,我已经将它们全部加入以获得我想要的结果

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_idanswer_idupvote (分别为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM