mysql查询用于创建像newsfeed这样的facebook

时间:2015-06-24 15:31:56

标签: mysql sql

我的mysql数据库中有三个表用户,朋友和新闻源,名为" test"。 这些表中的值是

users table values...

id    |    username    |    password
-------------------------------------
  1   |     user1      |      pass1
-------------------------------------
  2   |     user2      |      pass2
-------------------------------------
  3   |     user3      |      pass3

friends table values

id    |    friend_from    |    friend_to    |    status
--------------------------------------------------------
  1   |      user1        |       user2     |       1
--------------------------------------------------------
  2   |      user2        |       user3     |       1
--------------------------------------------------------
  3   |      user3        |       user1     |       1

newsfeed table values

id    |    username    |    post
----------------------------------
  1   |    user1       |    post1
----------------------------------
  2   |    user2       |    post2
----------------------------------
  3   |    user3       |    post3

现在我想从newsfeed table获取user1的朋友的所有数据。因为我写了如下查询

SELECT * FROM newsfeed WHERE friends.friend_from=newsfeed.username AND friends.friend_to='user1' AND friends.status=1 OR friends.friend_from='user1'AND friends.friend_to=newsfeed.username AND friends.status=1

现在我期待结果如下

user2    post2
user3    post3

但我得到以下结果......

#1054 - Unknown column 'friends.friend_from' in 'where clause' 

是什么原因......

1 个答案:

答案 0 :(得分:1)

正如您所知,您的SQL不知道friends是什么,您需要将其包含在您选择的表列表中:

SELECT * FROM newsfeed,friends WHERE friends.friend_from=newsfeed.username AND friends.friend_to='user1' AND friends.status=1 OR friends.friend_from='user1' AND friends.friend_to=newsfeed.username AND friends.status=1

您还可以为表分配简写名称,以便更容易在SQL的其他位置引用,如下所示:

SELECT * FROM newsfeed n,friends f WHERE f.friend_from=n.username AND f.friend_to='user1' AND f.status=1 OR f.friend_from='user1' AND f.friend_to=n.username AND f.status=1