> 백엔드 개발 > PHP 튜토리얼 > 关于目录遍历与like查询

关于目录遍历与like查询

WBOY
풀어 주다: 2016-06-23 13:37:49
원래의
1106명이 탐색했습니다.

有一朋友现在遇到一个问题,有一目录存放的是图片文件,目录结构为三层,/uploads/avator/140320/*.jpg
也就是avator目录下有很多以目期命名的子目录,大概几百了。整个avator目录大概有8W左右的文件,其中有一部分文件
是无用了的垃圾文件,他想清掉。
这个目录中的大部分文件有一个表中的img_url字段记录了完全路径,即 路径+文件名, 比如:/upload/avator/140320/bid001.jpg。

他现在的作法是,遍历目录拿到所有文件名,然后查表 select 查 img_url like '%K',如果返回记录数等于0,就把这个文件从目录中删除掉。

表中的记录数有6W多条。

等于说有2W左右的文件是可删除的。

但是从运行来看,遍历目录很快,但是like时太慢了。。有没有更好更快的办法呀。

img_url字段建了索引


回复讨论(解决方案)

既然表中存放有完整的路径,那为什么还 like 呢?直接 = 不就快些

读取目录 glob('/uploads/avator/*/*.jpg') 放到一个临时表中
用这个临时表左连接数据表,右表为 null 的就是该删除的文件

img的src=“”时, 会导致有些浏览器显示一个x。 所以是不推荐将img的src设置为空的,。比较好的方案是remove image这个元素节点。

%开头的like是不启用索引的,像斑竹说的直接=
要么换个角度,遍历数据库,将有用的图片剪切到一个新文件夹,然后你懂的

谢谢各位指点

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿