首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >eCommerce数据库设计(多级分类)

eCommerce数据库设计(多级分类)
EN

Stack Overflow用户
提问于 2014-06-09 03:56:46
回答 2查看 1.6K关注 0票数 0

我想建立一个小的eCommerce网站,没有什么特别的,没有添加到购物车,评级和类似的东西,但我确实有一个两难境地。我需要有多个级别的类别。

举个例子,如果我可能会有这样的东西:

代码语言:javascript
复制
Samsung
  - Tv
    - Smart Tv
      - Samsuns Smart Tv s45
      - Samsung Smart Tv k7x
    - 3D Tv
      - some product
  - Laptops
    - Intel Core 7
       - Some product
    - Inter Core 5
       - Some product

LG
  - same stuff

唯一的问题是类别的级别没有预先定义,所以我不知道会有多少级别。

有没有人能给我举几个例子,mysql数据库是怎么看这种结构的?

EN

回答 2

Stack Overflow用户

发布于 2016-11-22 13:39:15

对于多个类别级别

代码语言:javascript
复制
id | category_name | slug | parent_id

考虑这样的设计

票数 1
EN

Stack Overflow用户

发布于 2018-10-03 20:39:00

我已经在coldfusion中写了这段代码,你可以根据你的要求进行修改...

代码语言:javascript
复制
<cfquery name="Stuff" datasource="xyz">
    SELECT CategoryId, CategoryName, ParentId
    FROM Category
    ORDER BY CategoryName
</cfquery>

<cfset RootItems=ArrayNew(1)>
<cfset Depth=ArrayNew(1)>
<cfset RowFromID=StructNew()>
<cfset ChildrenFromID=StructNew()>

<cfloop query="Stuff">
    <cfset RowFromID[CategoryId]=CurrentRow>
    <cfif NOT StructKeyExists(RowFromID, ParentId)>
        <cfset ArrayAppend(RootItems, CategoryId)>
        <cfset ArrayAppend(Depth, 0)>
    </cfif>
    <cfif NOT StructKeyExists(ChildrenFromID, ParentId)>
        <cfset ChildrenFromID[ParentId]=ArrayNew(1)>
    </cfif>
    <cfset ArrayAppend(ChildrenFromID[ParentId], CategoryId)>
</cfloop>

<cfloop condition="ArrayLen(RootItems) GT 0">   
    <cfset ThisID=RootItems[1]>
    <cfset ArrayDeleteAt(RootItems, 1)>
    <cfset ThisDepth=Depth[1]>
    <cfset ArrayDeleteAt(Depth, 1)>

    <cfif StructKeyExists(RowFromID, ThisID)>
        <cfset RowID=RowFromID[ThisID]>
        <cfoutput>#RepeatString("--",ThisDepth)# #Stuff.CategoryName[RowID]#</cfoutput>
    </cfif>
    <cfif StructKeyExists(ChildrenFromID, ThisID)>
        <cfset ChildrenIDs=ChildrenFromID[ThisID]>
        <cfloop from="#ArrayLen(ChildrenIDs)#" to="1" step="-1" index="i">
            <cfset ArrayPrepend(RootItems, ChildrenIDs[i])>
            <cfset ArrayPrepend(Depth, ThisDepth + 1)>
        </cfloop>
    </cfif>
</cfloop>

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

https://stackoverflow.com/questions/24110229

复制
相关文章

相似问题

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