我使用php上传图像并使用后缀创建同一图像的多个克隆,如此
image154547457_thumb.jpg
image154547457_small.jpg
image154547457_400x500.jpg
image154547457_800x1000.jpg
image154547457_100x125.jpg
image154547457_retina.jpg
...
我使用文件名的最后2个字符将克隆图像存储在文件系统中,所以我最终没有一个大目录,如此
/gallery/files/7/5
我在mySQL表中存储对图像的引用,如此
image (image_id, caption, filedir, filename, fileext)
image caption filedir filename filext
------------------------------------------------------------
1 .... 7/5/ image154547457 jpg
然后,我检索项目所需的图像,如此
SELECT i.image_id, i.caption, CONCAT(i.filedir, i.filename, '_thumb', '.', fileext) thumb, CONCAT(i.filedir, i.filename, '_retina', '.', fileext) retina, CONCAT(i.filedir, i.filename, '_800x1000', '.', fileext) _800
FROM image i
WHERE i.image_id = 1
这是我需要专家建议的地方。
我也可以在mySQL中使用文件名,就像这样
image caption filename
-----------------------------------
1 .... image154547457.jpg
像这样检索
SELECT i.image_id, i.caption, i.filename
FROM image i
WHERE i.image_id = 1
并使用PHP完成剩余的过程,如此
$filename = substr($filename, 0 , strrpos($filename, "."));
$filedir = substr($filename, -1) . '/' . substr($filename, -2, 1) . '/';
$filext = substr($filename, strrpos($filename, ".") + 1);
thumb = $filedir . $filename . '_thumb' . '.' . fileext;
retina = $filedir . $filename . '_retina' . '.' . fileext;
_800 = $filedir . $filename . '_800x1000' . '.' . fileext;
假设我每页检索100张图片。
哪种更贵和/或更好的方法? 直接从MYSQL(2个额外的列)检索信息或使用PHP来处理它(在mysql表中不需要'filedir'和'fileext'列)?
我在这里做了一些研究,但我无法找到这个逻辑问题的答案。