我有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的文件列表。
正如您所看到的,我的用户标识9
也在usernetworks表中,我与网络ID 10293连接。
我还希望在查询中包含任何默认为1的行,并且网络ID与usernetworks表中的任何行匹配我的userID。
因此,当userid连接到networkid时,也会显示那些结果以及具有userid且没有网络ID的结果。
任何帮助表示感谢。
答案 0 :(得分:3)
如果我正确地阅读了您的逻辑,那么我们可以通过在用户与您的用户ID匹配的条件下首先将files
加入users
来实现它。然后,我们可以再次加入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
表中选择任何列,那么您可以完全省略该表的连接。我已将其保留,因为您的问题中的原始查询是正确的。
答案 1 :(得分:1)
我知道您希望自己的文件加上网络中的默认文件:
SELECT userid, filename, networkid
FROM files
WHERE (userid = $userid
OR (default = 1 AND networkid in (
select networkid from network_users where userid = $userid)))
AND filename like :name
您的SQL提及不在架构描述中的字段。
答案 2 :(得分:0)
如果您想根据网络ID获取数据,请使用此查询
SELECT file,filename,filetype,size, forename, files.userID
FROM files a, network b
WHERE a.networkID = b.networkID ORDER BY id DESC
。 希望这能解决你的问题