mysql - mysql 表中的下和子类别(coldfusion,mysql)

标签 mysql coldfusion

我有一个关于 ColdFusion 和 Mysql 的问题。我有两个表:PRODUCT 和 PRODUCT_CAT。我想列出包含一些标记为:IS_EXTRANET=1 的特殊产品的类别。所以我写了这个查询:

<cfquery name="get_product_cat" datasource="#dsn1#">
    SELECT PC.PRODUCT_CAT,PC.PRODUCT_CATID,PC.HIERARCHY
    FROM PRODUCT_CAT PC LEFT OUTER JOIN PRODUCT P ON P.PRODUCT_CATID=PC.PRODUCT_CATID
    WHERE P.IS_EXTRANET=1
    GROUP BY PC.PRODUCT_CATID,PC.PRODUCT_CAT,PC.HIERARCHY
    ORDER BY PC.HIERARCHY,PC.PRODUCT_CAT
</cfquery>

和输出:

<select name="product_catid">
    <option value="">All Categories</option>
    <cfoutput query="get_product_cat">
          <option value="#product_catid#" <cfif isdefined("attributes.product_catid") and len(attributes.product_catid) and (attributes.product_catid eq product_catid)>selected</cfif>><cfloop from="2" to="#listlen(hierarchy,'.')#" index="pc">&nbsp;&nbsp;</cfloop>#product_cat#</option>
    </cfoutput>
</select>

但是有个问题。在 product_cat 表中,有两种类别:“under”和“sub”。所以在每个“下”类别中,没有产品,但有“子”类别。当我尝试列出只有具有 is_extranet=1 定义的产品的类别时,没有列出“下”类别。但我也想列出“下”类别。换句话说,如果“子”类别中有定义为 is_extranet=1 的产品,则显示“下”类别,然后是包含这些产品的子类别。我希望我说清楚了:)

此外,“under”类别的层次结构如下所示:100 和 sub:100.001

最佳答案

基于 PC.HIERARCHY 是独一无二的,这对我有用:

SELECT PC.PRODUCT_CAT,PC.PRODUCT_CATID,PC.HIERARCHY
  FROM PRODUCT_CAT PC
  WHERE LEFT(PC.HIERARCHY,3) IN 

  (SELECT DISTINCT LEFT(PC.HIERARCHY,3)
    FROM PRODUCT_CAT PC
    INNER JOIN PRODUCT P ON P.PRODUCT_CATID=PC.PRODUCT_CATID
    WHERE P.IS_EXTRANET=1)

GROUP BY PC.PRODUCT_CATID,PC.PRODUCT_CAT,PC.HIERARCHY
ORDER BY PC.HIERARCHY,PC.PRODUCT_CAT;

或者:

SELECT PC.PRODUCT_CAT,PC.PRODUCT_CATID,PC.HIERARCHY
  FROM PRODUCT_CAT PC
  INNER JOIN 
  (SELECT LEFT(PC.HIERARCHY,3) AS UPPER
    FROM PRODUCT_CAT PC
    INNER JOIN PRODUCT P ON P.PRODUCT_CATID=PC.PRODUCT_CATID
    WHERE P.IS_EXTRANET=1) AS H
    ON LEFT(PC.HIERARCHY,3)=H.UPPER 
GROUP BY PC.PRODUCT_CATID,PC.PRODUCT_CAT,PC.HIERARCHY
ORDER BY PC.HIERARCHY,PC.PRODUCT_CAT;

我不确定哪个会提供更好的性能。 fiddle 是 here

关于mysql - mysql 表中的下和子类别(coldfusion,mysql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15677397/

相关文章:

php - 是否可以让PDO忽略无效参数号异常?

mysql - 如果不是 View ,如何在sql表中查看公式

coldfusion - Cold Fusion 2018 : how to save . xlsx 文件为 .csv

mysql - 发现mysql if条件语法错误

来自两次连接挑战的 MySQL 'multiple rows'

php - 在搜索中添加数字以在 php/laravel 中显示正确的结果

javascript - 如何从 javascript 调用 cfm 页面上的 cffunction?

ColdFusion 11 编译 CFC 花费太多时间

Coldfusion中的.Net时间字符串转换

coldfusion - 如何知道 SendGatewayMessage 何时失败