首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql表中的子类别和子类别(coldfusion,mysql)

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

Stack Overflow用户
提问于 2013-03-28 08:42:57
回答 1查看 190关注 0票数 1

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

代码语言:javascript
复制
<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>

和输出:

代码语言:javascript
复制
<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表中,有两种类型:“下面”和“子”。因此,在每个“下”类别中,没有产品,但有“子”类别。当我试图列出只有具有is_extranet=1定义的产品的类别时,没有列出“下面”的类别。但我希望“下面”的类别也列出。换句话说,如果在“子”类别内是一个定义为is_extranet=1的产品,则显示“下面”类别,然后将其子类别与这些产品一起显示。希望我说得很清楚:)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-28 11:42:16

基于PC.HIERARCHY是唯一的,这对我来说是可行的:

代码语言:javascript
复制
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;

另一种选择是:

代码语言:javascript
复制
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;

我不确定哪一种能让你表现更好。小提琴是这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15677397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档