从另一个查询的结果CFQuery'WHERE'?

时间:2011-10-26 18:04:55

标签: coldfusion cfquery

我将解释这个“现实生活”的应用,以便更容易理解。

我正在开发一个具有类别结构的电子商务应用。它从顶层开始,逐渐向下移动到子类别。例如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>

2 个答案:

答案 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。