如何在MySQL中加入2个以上的表?

时间:2015-08-18 17:36:12

标签: mysql database

我有3个表我希望彼此加入所有表。但是我的第3张表没有用。

见我的表 -

用户

 id       | username       |is_active
----------|----------------|------------
 1        | chinu          | 1  
 2        | sradhanjali    | 1
 3        | User3          | 0

设置

 id       | user_id   |  public_msg_notification
----------|-----------|---------------------------
 1        | 1         | 1  
 2        | 2         | 1
 3        | 3         | 1

朋友

 id       | user_id   |  friend_id  |  is_block
----------|-----------|---------------------------
 1        | 3         | 1           |  0
 2        | 1         | 2           |  1
 3        | 3         | 2           |  0

查询

SELECT a.username FROM users a
  JOIN settings b
  JOIN friends c ON(a.id=c.user_id OR a.id=c.friend_id)
  WHERE a.username IN('john','piter','rahul','sradhanjali')
    AND a.id != '1' AND a.is_active=1
    AND a.id=b.user_id AND b.public_msg_notification=1
    AND c.is_block=0 GROUP BY a.username

我已在我的本地仅sradhanjali用户名中运行此查询。但是is_block=1表中的此用户friends

我认为我的第三张桌子friends无效。我希望将结果显示为is_block=0的用户名。在上面的数据中,我的输出应该为零(0)但是在执行上面的查询时我得到1条记录。

1 个答案:

答案 0 :(得分:1)

我们进行了聊天讨论,我认为这个问题大部分都不是在SO上。我确实承诺,如果我能弄清楚,我会尝试提供一些见解。在这一点上,我认为这是一种正确的方法,但它对这个实例非常具体。

SELECT u.username FROM users u 
JOIN (SELECT 
    IF(u.id=f.user_id, f.friend_id, f.user_id) as ids
          FROM users u 
          JOIN friends f ON (f.user_id=u.id OR f.friend_id=u.id)
                WHERE
        u.id=$SOME_ID AND f.is_block=0) friends ON (u.id=friends.ids)
JOIN settings s ON (s.user_id=friends.ids)
WHERE  s.public_msg_notification=1 AND u.is_active=1
GROUP BY friends.ids

通过尝试过于具体,您无法再打开查询,并且必须在内部执行嵌套查询。这应该让所有与您成为朋友的用户都知道哪些用户正在接受公共通知并且处于活动状态。我担心这会失败。但这至少会让你朝着正确的方向前进。