Php sql-查找未使用的文件夹

Php sql-查找未使用的文件夹,php,mysql,sql,directory,Php,Mysql,Sql,Directory,我正在尝试查找上载文件时未使用的文件夹。 我有两张桌子- 文件夹表-其中文件夹名称为存储文件夹ID、文件夹名称、用户ID 文件表-将文件上载到其中的fileID、fileName、folderName、userID 用户上载文件时,会从文件夹表中选择文件夹名称,然后继续 我试图查找用户未使用的文件夹名称,这些名称存储在folders表中,但我无法找出正确的sql语句来查找这些未使用的文件夹。您可以这样进行连接 select f.folderID, f.folderName, fi.userID

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

文件夹表-其中文件夹名称为存储文件夹ID、文件夹名称、用户ID 文件表-将文件上载到其中的fileID、fileName、folderName、userID 用户上载文件时,会从文件夹表中选择文件夹名称,然后继续


我试图查找用户未使用的文件夹名称,这些名称存储在folders表中,但我无法找出正确的sql语句来查找这些未使用的文件夹。

您可以这样进行连接

select f.folderID, f.folderName, fi.userID from folders f
left join files fi on fi.userID = f.userID 
对于userID列返回null的所有记录都表明这些文件夹与任何用户都没有关联

您可以使用NOT EXISTS,其优点如中所述

看着它工作。

怎么样

select * from `folder` 
left join `files` on `files`.`folderName` = `folder`.`folderName`
where `files`.`fileID` IS NULL
你可以在这里查一下


此示例使用相同的表设置:

根据您的表设置,由于userID在两个表中,我假设您希望在确定哪些文件夹未使用时包含userID连接,而其他一些答案不使用

但我个人不会这样安排我的桌子。我将使用folders主键而不是它的名称链接表

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。希望这有帮助。

您使用的是哪个数据库?MySQL还是SQL Server?谢谢。如何调整此语句以允许变量搜索当前登录用户的文件夹?是否要搜索此查询返回的文件夹?如果是,请参阅更新的答案。是。此sql语句的主要目的是查找存储在folders表中的未使用文件夹,然后用户可以选择删除这些文件夹。我想通过使用登录用户的用户ID搜索未使用/未使用的文件夹。对于所有编辑,请参阅更新的答案。@user1386999此答案或其他答案有帮助吗?投票/回答?还是你需要更多的帮助?
select * from folders f
where folderName not in
(
    select folderName from files i
    where i.userID = f.userID
)
and userID = ?