代码之家  ›  专栏  ›  技术社区  ›  Powertieke

mysql count(*)left join group by-文件夹中的文件数

  •  1
  • Powertieke  · 技术社区  · 7 年前

    我有下列表格

    CREATE TABLE `files` (
      `fileid` int(11) NOT NULL AUTO_INCREMENT,
      `filename` varchar(255) NOT NULL,
      `filesize` int(11) NOT NULL,
      `folder` int(11) NOT NULL,
      PRIMARY KEY (`fileid`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
    
    CREATE TABLE `folders` (
      `directoryid` int(11) NOT NULL AUTO_INCREMENT,
      `directoryname` varchar(255) NOT NULL,
      PRIMARY KEY (`directoryid`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
    

    如何获取所有文件夹的列表以及它们所持有的文件数,包括没有(零)文件的文件夹?不能考虑递归。

    找到了

    select folders.directoryid, folders.directoryname, count(files.fileid) as no_files
    from  folders
    left join files on files.folder = folders.directoryid
    group by folders.directoryid, folders.directoryname
    

    我希望它能帮助别人。

    3 回复  |  直到 16 年前
        1
  •  1
  •   lewis    16 年前
    select folders.directoryname, 
           count(files.fileid) 
    from folders left outer join 
         files on folders.directoryid = files.folder 
    group by folders.directoryid
    

    应该可以了

        2
  •  0
  •   Adriaan Stander    16 年前

    你可以试试

    SELECT f.directoryid,
       COUNT(fs.fileid) CountOfFiles
    FROM folders f LEFT JOIN
        files fs ON f.DirectoryID = fs.folder
    GROUP BY f.directoryid
    
        3
  •  0
  •   Marcus Adams    16 年前
    SELECT directoryname, COUNT(files.fileid) AS filecount
    FROM folders
    LEFT JOIN files ON files.folder = folders.directoryid
    GROUP BY directoryid
    ORDER BY directoryname