【问题标题】:sql - find which folder is not used [closed]sql - 查找未使用的文件夹[关闭]
【发布时间】:2014-01-12 22:05:48
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您使用的是哪个数据库? MySQL 还是 SQL Server?

标签: php mysql sql directory


【解决方案1】:

此示例使用相同的表设置:http://sqlfiddle.com/#!2/6935a/1

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

我个人不会这样设置我的桌子。我会使用文件夹主键而不是名称来链接表。

select * from folders f
where folderName not in
(
    select folderName from files i
    where i.userID = f.userID
)

UPDATE -- 显示当前登录用户未使用的文件夹...

select * from folders f
where folderName not in
(
    select folderName from files i
    where i.userID = f.userID
)
and userID = ?

当然,您必须从 php(用户 ID)提供您的绑定变量。希望这会有所帮助。

【讨论】:

  • 谢谢。我如何调整此语句以允许变量搜索当前登录用户的文件夹?
  • 你是说你想搜索从这个查询返回的文件夹吗?如果是这样,请参阅更新的答案。
  • 是的。此 sql 语句的主要目的是查找存储在文件夹表中的未使用文件夹,然后用户可以选择删除这些文件夹。我想通过使用登录用户的用户 ID 搜索来查找未使用/未使用的文件夹。
  • 抱歉所有的编辑,请参阅更新的答案。
  • @user1386999 这个或其他答案有帮助吗?投票/回答?还是您需要更多帮助?
【解决方案2】:

你可以这样加入

select f.folderID, f.folderName, fi.userID from folders f
left join files fi on fi.userID = f.userID 

对于 userID 列返回 null 的所有记录都表明这些文件夹未与任何用户关联。

【讨论】:

    【解决方案3】:

    你可以使用NOT EXISTS,它的优点在this answer from SO中有描述。

    SELECT * FROM folders WHERE NOT EXISTS (SELECT id FROM files WHERE files.folderName = folders.name);
    

    看到它工作in this SQLFiddle

    【讨论】:

      【解决方案4】:

      怎么样

      select * from `folder` 
      left join `files` on `files`.`folderName` = `folder`.`folderName`
      where `files`.`fileID` IS NULL
      

      你可以在这里查看

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-09
        • 2012-07-16
        • 2020-10-28
        • 1970-01-01
        • 1970-01-01
        • 2010-09-19
        • 1970-01-01
        相关资源
        最近更新 更多