0

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

我有 2 张桌子。一个称为 users,其中包含我所有的用户/密码详细信息,然后我有另一个名为 userFiles 的表,其中包含用户 ID 和他有权访问的文件的 fileID。

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

所以基本上,第一张桌子有,说:

  1. ID:1,姓名:bob,密码:helloWorld
  2. ID:2,姓名:phil,密码:what'sUp?

在表 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

现在,这就是我想要做的:

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

例如,我想用 fID 67 查询用户和用户权限

我想得到这个:

  1. ID:1,姓名:bob,密码:helloWorld,uID:1,fID:67
  2. ID:2,姓名:phil,密码:what'sUp?,uID:2,fID:67

并且,对于 fID 102(即使它给出的值不是 NULL,我也可以在我的 PHP 代码中使用它,这很好)

  1. ID:1,名称:bob,密码:helloWorld,uID:NULL,fID:NULL
  2. ID:2,名称:phil,密码:what'sUp?,uID:2,fID:102

这是我尝试使用的查询

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

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

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

万分感谢!

4

1 回答 1

2

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

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

请注意,对于无权访问该文件的用户,只有 users.ID 字段将为 NULL - flID 字段仍将被填充。

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

于 2012-08-26T07:01:30.487 回答