这是一个架构问题,但它的解决方案在于ColdFusion和MySQL结构 - 或者至少我相信。
我的数据库中有一个产品表,每个产品都可以有任意数量的屏幕截图。我目前显示产品屏幕截图的方法如下:
我有一个文件夹,其中包含与所有产品相关的所有屏幕截图。所有屏幕截图的命名与数据库中的productID完全相同,加上前缀。
例如:产品ID为15的产品的屏幕截图位于文件夹图像中,名称为15_screen1.jpg,15_screen2.jpg等......
在我的ColdFusion页面中,我将图像路径硬编码为HTML(images /);图像名称分为两部分;第一部分是使用查询中的productID动态生成的;第二部分是前缀,并且是硬编码的。例如:
<img src"/images/#QueryName.productID#_screen1.jpg">
<img src"/images/#QueryName.productID#_screen2.jpg"> etc...
这种方法有效,但它有以下最大的限制:
我考虑过在我的产品表中创建一个路径列,但这意味着为每个产品创建数百个文件夹,这似乎也没有效率。
对于解决此问题的正确方法,有没有人有任何建议或想法?
非常感谢!
答案 0 :(得分:2)
怎么样......
使用Image表,一个产品到多个图像(带有可选的sortOrder列?),并使用imageID作为jpeg文件名?
<强>更新强>
拥有一个ImageClass表,许多Image到一个ImageClass。
Image
-----
ID
productID
imageClassID (FK to ImageClass)
使用后端业务逻辑来强制执行某些类只能有一个图像。
或者...... 如果你真的想强制执行某些类只能有一个图像,那么可以选择更复杂的设计:
Product
------
ID
name
...
frontCoverImageID
backCoverImageID
frontThumbImageID
backThumbImageID
Image
-----
ID
productID
isScreenShot (bit) // optional, but easier to query later...
但是,我更喜欢第一个更好的,因为你可以拥有你认为合适的课程,而无需重构数据库。
答案 1 :(得分:1)
保持数据库中有多少图像和哪些图像的信息绝对是可行的方法。
除非你想使用命名约定将图像与产品相关联,并且图像的数量是任意的,那么为每个产品创建一个文件夹可能更好:
/images/products/{SKU1}/frontview.jpg
/images/products/{SKU1}/sideview.jpg
/images/products/{SKU2}/frontview.jpg
等等。然后使用<cfdirectory>
收集给定产品的图像。您可能还想为图片命名00_frontview.jpg
,01_sideview.jpg
等,以便您可以对页面上显示的顺序进行排序和控制。
答案 2 :(得分:1)
使用cfdirectory标签检查文件系统:
<!--- get a query resultset of images in filesystem --->
<cfdirectory action="list" name="images" directory="images">
<!--- get images for specific product --->
<cfquery name="productImages" dbtype="query">
select *
from images
where name like '#productid#%'
</cfquery>
<cfoutput query="productImages">
<img src="#productimages.directory#/#productimages.name#" />
</cfoutput>
您甚至可以尝试使用filter
属性来cfdirectory尝试省略QoQ