3

因为我很生气,有时我以前​​问过错误的问题。现在这就是我想要完成的。

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

表:

推文

用户 ID | 编号 | 日期 | 信息

用户

编号 | 电子邮件 | 密码 | 用户名

用户详情

编号 | 名字 | 姓氏 | profile_img | 用户 ID | 关于

下列的

编号 | 用户 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
4

3 回答 3

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
       )
于 2013-04-21T17:04:04.293 回答
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 。请查看它是否适用于您的真实数据集。

于 2013-04-21T21:28:44.797 回答
0

如果您将最后两行重写为

LEFT JOIN following ON following.user_id = user.id
WHERE user.id = 1

我认为您的下表左连接的 ON 子句不会像现在这样工作。

于 2013-04-21T16:29:13.480 回答