从id和跟随id的两个表中获取结果

时间:2013-04-21 16:21:47

标签: mysql sql

由于我很傻逼,有时我之前会问错误的问题。 现在这就是我想要完成的事情。

我试图获取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

3 个答案:

答案 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子句不会像现在一样工作。