sql - 查找未使用的文件夹

时间:2014-01-12 22:05:48

标签: php mysql sql directory

我正在尝试查找上传文件时未使用的文件夹。 我有2张桌子 -

  • 文件夹表 - 存储文件夹名称(folderID, folderName, userID
  • files table - 将文件上传到(fileID, fileName, folderName, userID
  • 的位置

当用户上传文件时,他们从文件夹表中选择文件夹名称,然后继续。

我正在尝试查找用户未使用的文件夹名称,这些名称存储在文件夹表中,但我找不到正确的sql语句来查找那些未使用的文件夹。

4 个答案:

答案 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

你可以在这里查看

http://www.sqlfiddle.com/#!2/e225ec/1

答案 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)提供你的绑定变量。希望这会有所帮助。