如何按条件加入查询中的新列?我有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
答案 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中的关键字。您应该在语句中选择另一个表名或引用/转义表名。)