我将解释这个“现实生活”的应用,以便更容易理解。
我正在开发一个具有类别结构的电子商务应用。它从顶层开始,逐渐向下移动到子类别。例如Home>电子产品>电视>血浆
我正在使用单页,如果没有定义类别则显示“主页”,如果有任何类别则显示子类别,如果没有子类别则显示产品。
这一切都很好,但是当我到达第二部分 - 显示子类别时,页面有点空。因此,我想展示一系列涵盖所有适用子类别的产品。
这是我在努力的地方 - 在大多数情况下,会有一些子类别。但是,我不确定如何使用上一个查询的结果构建'where'查询(下面的代码片段以供参考)。
我不相信QofQ值得探索,而且我已经徒劳地尝试用子串做事,但没有成功。
任何指针都非常赞赏!
<cfquery name="getcategories">
SELECT p.ID AS CategoryID, p.Cat_Name as CategoryName, p.Cat_Shortname, c.ID AS SubCategoryID, c.Cat_Name as SubCategoryName, c.Cat_Shortname AS SubCatShortname
FROM product_categories p LEFT JOIN product_categories c ON p.ID = c.SubcategoryOf
WHERE p.SubcategoryOf = 0
</cfquery>
<cfif IsDefined('url.cat')>
<!--- Look for additional subcategories --->
<cfquery name="getsubcategories">
SELECT *
FROM product_categories
WHERE Subcategoryof='#url.cat#'
</cfquery>
<cfquery name="getproducts">
SELECT *
FROM products
WHERE categoryid='#url.cat#'
ORDER BY RAND()
</cfquery>
</cfif>
答案 0 :(得分:4)
假设您的产品表包含某种子类别ID,您可以使用以下内容从查询getsubcategories获取子类别ID列表:
<cfset subCategoryIDs = valueList(getsubcategories.subCategoryID) >
这将为您提供所有subCategoryID的列表。您可以将其提取到getproducts查询中,如下所示:
<cfquery name="getproducts">
SELECT *
FROM products
WHERE subCategoryID in (<cfqueryparam cfsqltype="cf_sql_integer" value="#subCategoryIDs#" list="true">)
ORDER BY RAND()
</cfquery>
您应始终cfqueryparam
您的查询参数。
答案 1 :(得分:2)
如果我理解您的数据库结构,此查询应返回所有子类别中的所有产品。
<cfquery name="getallproducts">
SELECT *
FROM products p LEFT JOIN product_categories pc ON p.categoryID = pc.ID
WHERE pc.Subcategoryof= <cfqueryparam cfsqltype="cf_sql_integer" value="#url.cat#">
</cfquery>
注意:你真的想在这里使用cfqueryparam。