艰难的mySQL选择查询

时间:2012-08-26 06:51:26

标签: php mysql select

我陷入了一种奇怪的境地。它是这样的:

我有2张桌子。一个叫做用户,它有我所有的用户/密码详细信息,然后我有另一个名为userFiles的表,它有一个用户ID和一个他有权使用的文件的fileID。

现在,请注意,1个帐户可以拥有多个文件的权限,多个帐户可以拥有1个文件的权限。

所以基本上,第一个表有,比如说:

  1. ID:1,名称:bob,密码:helloWorld
  2. ID:2,姓名:phil,密码:What'sUp?
  3. 并在表2中说:

    1. uID:1,fID:67
    2. uID:1,fID:68
    3. uID:1,fID:36
    4. uID:2,fID:67
    5. uID:2,fID:68
    6. uID:2,fID:102
    7. 现在,这就是我想要做的事情:

      我想选择所有用户! (在这种情况下都是!),同样,我想加入另一个表,但我只想加入我指定特定fID的行!

      例如,我想用fID 67

      查询用户和用户权限

      我想得到这个:

      1. ID:1,姓名:bob,密码:helloWorld,uID:1,fID:67
      2. ID:2,姓名:phil,密码:What'sUp?,uID:2,fID:67
      3. ,对于fID 102(即使它给出的值不是NULL,我可以在我的PHP代码中使用,也没关系)

        1. ID:1,name:bob,密码:helloWorld,uID:NULL,fID:NULL
        2. ID:2,姓名:phil,密码:What'sUp?,uID:2,fID:102
        3. 这是我尝试使用的查询

          SELECT * FROM users LEFT JOIN userFiles ON users.ID=userFiles.uID WHERE userFiles.fID = 102
          

          但是,这个查询只返回一行,而我不是两个。

          如果您无法使用mySQL解决方案,请尝试帮助我,以便我可以过滤掉结果,并使用PHP获得我想要的东西......

          非常感谢!

1 个答案:

答案 0 :(得分:2)

您需要将条件从WHERE移动到JOIN,如下所示:

SELECT * FROM users
LEFT JOIN userFiles ON users.ID=userFiles.uID AND userFiles.fID = 102

建议只有users.ID字段对于无权访问该文件的用户为NULL - 仍然会填充flID字段。

为了将来参考,WHERE条件过滤整个结果集,而JOIN条件只过滤在整个结果集上加入的记录(不影响返回的行数)。