我有 2 个数据库表。
一个叫做文件。看起来像这样。
文件
USERID FILENAME DEFAULT NETWORKID
88 hello 1 10293
9 bob
43 opener 1 10293
43 facepa
9 closer
二表用户网络
USERID NETWORKID
9 10293
43
我当前的sql查询是
SELECT file,filename,filetype,size, forename, files.userID
FROM (`files`)
LEFT JOIN users ON users.userID = files.userID
WHERE files.userID = $userID ORDER BY id DESC
这当前获取 userid 为 9 的文件列表。
如您所见,我的用户 ID 9
也在 usernetworks 表中,我连接到网络 ID 10293。
我还想在查询中包括任何默认为 1 的行,并且网络 ID 与 usernetworks 表中任何具有我的用户 ID 的行相匹配。
因此,在 userid 连接到 networkid 的情况下,还会显示那些结果以及具有 userid 而没有网络 id 的结果。
感谢任何帮助。
最佳答案
如果我没看错你的逻辑,那么我们可以通过首先将 files
左连接到 users
来实现它,条件是用户与你的用户 ID 匹配。然后,我们可以再次加入users
,这次的条件是文件记录是默认的,网络ID匹配,匹配的用户也是你的用户。
SELECT f.*
FROM files f
LEFT JOIN users u1
ON f.userID = u1.userID AND f.userID = $userID
LEFT JOIN usernetworks u2
ON f.default = 1 AND
f.networkid = u2.networkid AND u2.userID = $userID
WHERE
u1.userID IS NOT NULL OR u2.userID IS NOT NULL;
实际上,如果您不打算从 users
表中选择任何列,那么您可以完全省略与该表的连接。我已将其保留,因为它符合您问题中的原始查询。
关于php - 从多个 mysql 表 WHERE 获取数据。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48685082/