我正在尝试编写一个函数来查找产品的替代版本中的图像(这些是书籍,因此任何具有相同“标题”的产品都可以使用)通过循环浏览任何与该产品共享标题的产品错过了一个图像。
我首先运行查询以获取将在页面上显示的产品(我知道这部分工作正常,所以我不关心它)。在显示图像时,我首先检查所选产品是否有一个。
如果没有可用的图像,我想对具有相同“标题”或“完整标题”的任何产品运行第二个查询,并查看它们是否具有可用图像。 (正如您在代码中看到的那样#SKU#.jpg)如果找到其中一个备用版本的图像,我将其保存到变量中,一旦循环结束,我将显示所选图像。
如果我仍未找到产品图片,则会显示我们的默认“图片不可用”图片。
<cfquery name="GetProductBasicInfo" datasource="#Request.Application.DataApp.datasource#" dbtype="odbc">
SELECT product.Title, product.FullTitle, product.SKU, product.series, product.pubdate, productmarket.binding, product.productid, productmarket.productid
FROM Product, productmarket
WHERE product.productid = productmarket.productid
AND productmarket.Binding LIKE '#FORM.formFormat#'
AND product.series NOT IN ('Young Adult','childrens')
AND product.PubDate
BETWEEN '<cfoutput>#DatePart("m", FORM.formDate)#</cfoutput>/01/<cfoutput>#DatePart("yyyy", FORM.formDate)#</cfoutput>'
AND '<cfoutput>#DatePart("m", FORM.formDate)#</cfoutput>/28/<cfoutput>#DatePart("yyyy", FORM.formDate)#</cfoutput>'
</cfquery>
<cfoutput query="GetProductBasicInfo">
<!-- set of CFIF statements that determine if the current product has an image. If not, the following code is executed -->
<cfquery name="altImages" datasource="#Request.Application.DataApp.datasource#" dbtype="odbc">
SELECT product.SKU
FROM Product
WHERE product.title = '#Title#' OR product.fulltitle = '#FullTitle#'
</cfquery>
<cfset altPic = "">
<cfloop query="altImages">
<cfset altPicLocation = '#application.site.PWROOT#/client/products/prodimagetmb/#altImages.sku#.jpg'>
<cfif FileExists(ExpandPath(altPicLocation)) eq 'true'>
<cfset altPic = altPicLocation>
</cfif>
</cfloop>
<cfif altPic NEQ "">
<img src = "#altPic#" border = "0"> </a>
<cfelse>
<img src = "<cfoutput>#application.site.PWROOT#</cfoutput>/client/Products/prodimagedefault/tmbdefault/defaulttmb.jpg" border="0"> </a>
</cfif>
</cfoutput>
当我运行上面的代码时,我收到错误响应。由于“安全问题”我不允许Coldfusion管理员通过或访问我正在开发的网站的错误日志(是的,我知道这有多愚蠢)所以我不知道具体的错误是什么我到了。
编辑:错误已解决。它与我的第二个查询的格式和我修复过的拼写错误有关。结果就像我担心的那样低效,所以我仍然希望以某种方式简化它。
编辑:添加了每个请求的第一个查询的代码。 “产品”是一个绝对大量的表,包含我们公司销售的约20k个产品记录,每个产品大约35-40列。 Productmarket是一个关联表,其中包含大约40多列。
第一个查询按产品类型和发布日期搜索,以定义页面的内容。当给定产品不存在名称为#SKU#.jpg的图像时,将触发第二个查询;它搜索具有完全相同标题的任何其他产品(从第一次搜索中将省略,因为它是错误的产品类型)。如果存在此类产品,则会检查