按条件加入新列

时间:2014-05-17 17:55:21

标签: mysql

如何按条件加入查询中的新列?我有3张桌子:

  

用户表:

userid     name
1          John
2          Joe
3          Sam
4          Alex
  

问题表:

userid     questionid     asked
1          1              2011-11-11 22:52
1          2              2011-11-11 22:52
3          3              2011-11-11 22:52
2          4              2011-11-11 22:52
  

喜欢表格:

userid     questionid
1          1
1          2
1          3
1          4

我想查询用户的问题并确定用户是否喜欢该问题。结果应该是用户喜欢这个问题:

userid     questionid     liked
1          1              1

用户不喜欢这个问题的其他情况:

userid     questionid     liked
2          1              0

我现在正在使用的代码:(有点不同的字段名)

SELECT temp.`id`, temp.`userid`, `categories`.`name`, `user`.`username`, temp.`title`,
    temp.`details`, temp.`date` FROM (
    SELECT `id`, `categoryid`, `details`, `title`, `userid`, `date`, @a := id, if(@a = ". $position .", @b := 1, @b) AS join_id
    FROM `questions`
    join(SELECT @a := 0, @b := 0) t
    ORDER BY `date` DESC
    ) as temp
    LEFT JOIN `user`
    ON temp.`userid` = `user`.`userid`
    LEFT JOIN `categories`
    ON temp.`categoryid` = `categories`.`categoryid`
    WHERE join_id = 1
    LIMIT 1,5;

位置表示要查询的ID。 ATM用户ID 31只是喜欢的问题。 SQLfiddle:http://sqlfiddle.com/#!2/5fe17/2

1 个答案:

答案 0 :(得分:2)

使用左(外)联接将Like表连接到Question表。 对于每个匹配Like.userid(和Like.questionid)将是not null,否则为null。 您可以使用IF()函数在选择列中进行检查:

SELECT userid, questionid, if(Questions.userid is null, 0, 1) as liked 
FROM Questions 
LEFT OUTER JOIN Like ON Questions.userid = Like.userid and Questions.questionid = Like.questionid;

列出了用户被问到的所有问题。您可以通过添加WHERE子句将其缩小到一个用户和一个问题。

(请注意,LIKE是MySQL中的关键字。您应该在语句中选择另一个表名或引用/转义表名。)