Coldfusion CFQuery来自另一个查询结果的“WHERE”?

Coldfusion CFQuery来自另一个查询结果的“WHERE”?,coldfusion,cfquery,Coldfusion,Cfquery,我会解释这个“现实生活”的应用,这样更容易理解 我正在开发一个具有类别结构的电子商务应用程序。它从顶层开始,通过子类别逐渐向下移动。例如家庭>电子>电视>等离子 我使用一个单独的页面,如果没有定义类别,则显示“主页”,如果有子类别,则显示子类别,如果没有子类别,则显示产品 <cfquery name="getallproducts"> SELECT * FROM products p LEFT JOIN product_categories pc ON p.categoryI

我会解释这个“现实生活”的应用,这样更容易理解

我正在开发一个具有类别结构的电子商务应用程序。它从顶层开始,通过子类别逐渐向下移动。例如家庭>电子>电视>等离子

我使用一个单独的页面,如果没有定义类别,则显示“主页”,如果有子类别,则显示子类别,如果没有子类别,则显示产品

<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>
这一切都很好,但是当我进入第二部分-显示子类别时,页面有点空。因此,我想展示一系列涵盖所有适用子类别的产品

这就是我努力的地方——在大多数情况下,会有几个子类别。但是,我不知道如何使用下面前面查询代码片段的结果来构造“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>

假设products表包含某种子类别ID,则可以使用以下命令从查询getsubcategories获取子类别ID列表:

<cfset subCategoryIDs = valueList(getsubcategories.subCategoryID) >
这将为您提供所有子类别ID的列表。您可以将其输入getproducts查询,如下所示:

<cfquery name="getproducts">
SELECT *
FROM products
WHERE subCategoryID in (<cfqueryparam cfsqltype="cf_sql_integer" value="#subCategoryIDs#" list="true">)
ORDER BY RAND()
</cfquery>

您应该始终使用cfqueryparam查询参数。

假设您的产品表包含某种子类别ID,您可以使用以下命令从查询getsubcategories获取子类别ID列表:

<cfset subCategoryIDs = valueList(getsubcategories.subCategoryID) >
这将为您提供所有子类别ID的列表。您可以将其输入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。

如果我了解您的数据库结构,此查询应返回所有子类别中的所有产品

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

我认为QofQ不值得研究-为什么?主要是因为产品没有在类别查询中返回,并且仅为了QofQ返回它们会带来很大的开销。除非我遗漏了什么?我认为QofQ不值得探索-为什么?主要是因为产品没有在类别查询中返回,并且仅仅为了QofQ而返回它们将是巨大的开销。除非我遗漏了什么?谢谢Barry正是我想要的。关于使用cfqueryparam,您也完全正确-我似乎总是发现自己在经历并最终改变了所有这些,必须从一开始就养成这样做的习惯!谢谢你,巴里,这正是我想要的。关于使用cfqueryparam,您也完全正确-我似乎总是发现自己在经历并最终改变了所有这些,必须从一开始就养成这样做的习惯!