我有一个表,其中包含HDD上实际文件的相对路径.例如:
SELECT * FROM images -->
id | path
1 | /files/1.jpg
2 | /files/2.jpg
我可以创建一个查询来选择指向不存在的文件的所有记录吗?我需要完全通过MySql服务器检查它,而不使用PHP客户端中的迭代.
最佳答案
我会使用这样的查询:
SELECT id,path,ISNULL(LOAD_FILE(path)) as not_exists
FROM images
HAVING not_exists = 1
函数LOAD_FILE尝试将文件作为字符串加载,并在失败时返回NULL.
请注意,在这种情况下失败的原因可能是mysql根本无法读取该特定位置,即使该文件确实存在.
编辑:
正如@ostrokach在评论中指出的那样,这不是标准的SQL,即使MySQL允许它,也可以遵循标准:
SELECT *
FROM images
WHERE LOAD_FILE(PATH) IS NULL