0

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

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

我为此使用了一个页面,如果没有定义类别,则显示“主页”,如果有任何子类别,则显示子类别,如果没有子类别,则显示产品。

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

这就是我苦苦挣扎的地方——在大多数情况下,会有几个子类别。但是,我不确定如何使用上一个查询的结果构建“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>
4

2 回答 2

4

假设您的 products 表包含某种 subcategoryID,您可以使用以下命令从查询 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您的查询参数。

于 2011-10-26T18:22:12.407 回答
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。

于 2011-10-26T18:24:23.953 回答