由于我很傻逼,有时我之前会问错误的问题。 现在这就是我想要完成的事情。
我试图获取user.id = 1
的值以及user.id = 1
所关注的用户的值。
但我会从user.id 1
得到结果,或者在这种情况下跟随following.follow_id = 2
。
有什么想法吗?
我创建了一个用于显示的SQLfiddle。如您所见,我得到的唯一结果来自user_one。
http://sqlfiddle.com/#!2/6a39f/1
SELECT user.email,
user.username,
tweets.message,
tweets.date,
userdetails.profile_img,
userdetails.firstname,
userdetails.lastname,
following.id, following.user_id,
following.follow_id
FROM user
JOIN userdetails ON user.id = userdetails.user_id
JOIN tweets ON userdetails.user_id = tweets.user_id
LEFT JOIN following ON user.id = 1
WHERE following.user_id = 1
表:
鸣叫
user_id | id |日期|消息
用户
id |电子邮件|密码|用户名
的UserDetails
id |名字|姓氏| profile_img | user_id |约
以下
id | user_id | follow_id
在这种情况下,下表具有值
user_id = 1 and follow_id = 2
摘要。
User_id = 1 is following follow_id = 2
但我只能从user_id = 1
得到结果,而不能从两者得到结果。
感谢。
基本上我试图结合这两个问题。
查询从已被跟踪的用户获取结果。
SELECT user.email,
user.username,
tweets.message,
tweets.date,
userdetails.profile_img,
userdetails.firstname,
userdetails.lastname,
following.id, following.user_id,
following.follow_id
FROM user
JOIN userdetails ON user.id = userdetails.user_id
JOIN tweets ON userdetails.user_id = tweets.user_id
JOIN following ON following.follow_id
WHERE following.follow_id = tweets.user_id AND following.user_id = '1' ORDER BY tweets.date DESC
用于获取用户1的值的查询
SELECT user.email,
user.username,
tweets.message,
tweets.date,
userdetails.profile_img,
userdetails.firstname,
userdetails.lastname
FROM user
JOIN userdetails ON user.id = userdetails.user_id
JOIN tweets ON userdetails.user_id = tweets.user_id
WHERE user.id = '1' ORDER BY tweets.date DESC
答案 0 :(得分:2)
您希望获取ID为1或ID为一个或多个其他值的数据。所以,你可以从这个
开始SELECT user.email,
user.username,
tweets.message,
tweets.date,
userdetails.profile_img,
userdetails.firstname,
userdetails.lastname,
following.id, following.user_id,
following.follow_id
FROM user
JOIN userdetails ON user.id = userdetails.user_id
JOIN tweets ON userdetails.user_id = tweets.user_id
WHERE user.id = 1
OR user_id IN
(
SELECT follow_id
FROM following
WHERE user.id = following.user_id
)
答案 1 :(得分:1)
这是bobs
的答案的{略微]修改版本(添加了LEFT OUTER JOIN
并修改了子查询):
SELECT user.id,
user.email,
user.username,
tweets.message,
tweets.date,
userdetails.profile_img,
userdetails.firstname,
userdetails.lastname,
following.id, following.user_id,
following.follow_id
FROM user
LEFT JOIN following ON user.id = following.user_id
JOIN userdetails ON user.id = userdetails.user_id
JOIN tweets ON userdetails.user_id = tweets.user_id
WHERE user.id=1 OR
user.id IN (SELECT follow_id
FROM following
WHERE following.user_id = 1);
这是添加了第三位用户的SQL Fiddle。请查看它是否适用于您的真实数据集。
答案 2 :(得分:0)
如果将最后两行重写为
,它会有帮助吗?LEFT JOIN following ON following.user_id = user.id
WHERE user.id = 1
我认为下表左边连接的ON子句不会像现在一样工作。