我正在尝试查找上传文件时未使用的文件夹。 我有2张桌子 -
folderID, folderName, userID
)fileID, fileName, folderName, userID
)当用户上传文件时,他们从文件夹表中选择文件夹名称,然后继续。
我正在尝试查找用户未使用的文件夹名称,这些名称存储在文件夹表中,但我找不到正确的sql语句来查找那些未使用的文件夹。
答案 0 :(得分:0)
你可以像这样进行连接
select f.folderID, f.folderName, fi.userID from folders f
left join files fi on fi.userID = f.userID
为userID列返回null的所有记录都表示这些文件夹未与任何用户关联。
答案 1 :(得分:0)
您可以使用NOT EXISTS
,其优势在this answer from SO中描述。
SELECT * FROM folders WHERE NOT EXISTS (SELECT id FROM files WHERE files.folderName = folders.name);
查看工作in this SQLFiddle。
答案 2 :(得分:0)
怎么样
select * from `folder`
left join `files` on `files`.`folderName` = `folder`.`folderName`
where `files`.`fileID` IS NULL
你可以在这里查看
答案 3 :(得分:0)
此示例使用相同的表格设置: http://sqlfiddle.com/#!2/6935a/1
根据您的表设置,由于userID在两个表中,我假设您要包含userID join以确定哪些文件夹未被使用,而其他一些答案则没有。
我个人不会这样设置我的桌子。我会使用文件夹主键而不是它的名称来链接表。
select * from folders f
where folderName not in
(
select folderName from files i
where i.userID = f.userID
)
更新 - 显示未用于当前用户登录的文件夹...
select * from folders f
where folderName not in
(
select folderName from files i
where i.userID = f.userID
)
and userID = ?
当然,你必须从php(用户的ID)提供你的绑定变量。希望这会有所帮助。