我将解释它在"现实生活"中的应用,以便更容易理解。
我在一个电子商务应用程序,有一个类别结构。它从最高级别开始,并通过子类别逐渐向下移动。例如Home> Electronics> TVs> Plasma
我使用一个单独的页面,如果没有定义类别,则显示"主页"页面,如果有子类别,则显示子类别,如果没有子类别,则最后显示产品。
这一切都很好,但是当我到达第二部分-显示子类别时,页面有点空。因此,我希望显示涵盖所有适用子类别的产品选择。
这是我挣扎的地方——在大多数情况下,会有一些子类别。但是,我不确定如何使用前面查询的结果来构建'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>
假设您的产品表包含某种类型的子类别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
如果我理解你的数据库结构,这个查询应该返回所有子类别中的所有产品。
<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