快过新年了,给大家出点益智题活动一下吧。现有如下数据表:mysql> describe files;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | int(11)      | NO   | PRI | NULL    | auto_increment |
| fullpath      | varchar(600) | NO   | MUL | NULL    |                |
| is_dir        | tinyint(1)   | NO   |     | NULL    |                |
| is_hidden     | tinyint(1)   | NO   |     | NULL    |                |
| is_readonly   | tinyint(1)   | NO   |     | NULL    |                |
| is_system     | tinyint(1)   | NO   |     | NULL    |                |
| size          | bigint(20)   | NO   |     | NULL    |                |
| date_created  | datetime     | NO   |     | NULL    |                |
| date_accessed | datetime     | NO   |     | NULL    |                |
| date_modified | datetime     | NO   |     | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+有如下问题:
1、有没有可能用一个SQL语句统计每个目录下的文件个数?
2、有没有可能用一句SQL语句统计每个目录所占用的控件(注意:递归所有子目录)?
我的可用分很多,答对了有更多的奖励哦。

解决方案 »

  1.   

    select p.sDirectory,count(*) as fileCnt, sum(size) as totalBytes
    from (
    select distinct LEFT(fullpath,LENGTH(fullpath)-INSTR(REVERSE(fullpath), '/')+1) as sDirectory
    from files) p inner join files f on f.fullpath like concat(p.sDirectory ,'/%')
    group by p.sDirectory
    order by 1/home/admin/myfile/test.php但/home/如果没有直接的文件在表中,则不会被显示。如果也要的话,SQL语句很更复杂一些。
      

  2.   

    ACMAIN_CHM的语句好像效率不太高啊,运行好几分钟了,还没完。选择目录可以根据is_dir <> 0来判断的。
      

  3.   

    edyang 拥有以下勋章:
    勋章  拥有数量  说明
    状元  每年总版新获得的技术专家分排名第一  1  每年总版新获得的技术专家分排名第一
    金牌  每月社区总版中新获得的技术专家分排名第一  2  每月社区总版中新获得的技术专家分排名第一
    红花  每月大版块中新获得的专家分排名第一  7  每月大版块中新获得的专家分排名第一
    黄花  每月大版块中新获得的专家分排名第二  1  每月大版块中新获得的专家分排名第二 ========================================================================
    向你学习
      

  4.   

    呵呵,楼主只问有没有可能,并没有要人家写sql语句,那我就回答一下吧。
    1.有没有可能用一个SQL语句统计每个目录下的文件个数? 
    回答:很显然,可以实现。这个sql很好实现。(乍一看,很容易实现,仔细想想,还真的是容易实现)
    2、有没有可能用一句SQL语句统计每个目录所占用的控件(注意:递归所有子目录)? 
    回答:递归所有子目录 其实也是可以实现的,并不是很困难。
    但是,你的占用的控件?什么依据?没有看到你有控件这一栏位呀。
    你还是想要表达空间? 如果是空间的话,用sum(size)就可以了,也是比较容易实现的。(乍一看,几乎无法实现,仔细想想,还是比较容易实现的,并不复杂)以上的SQL,留给后人去完成吧。我的可用分不多,不过 wwwwA/wwwwb 的可用分貌似更多。
      

  5.   

    呵呵,就是想测试一下,用SQL语句是否能完成这个任务,楼主最好将记录及正确结果
    贴出来以供测试。