【问题标题】:eCommerce database design (multilevel categories)电子商务数据库设计(多级类别)
【发布时间】:2014-07-29 09:36:16
【问题描述】:

我想建立一个小型电子商务网站,没有什么特别的,没有添加到购物车、评级和类似的东西,但我确实有一个难题。我需要有多个级别的类别。

例如,如果我可能会有这样的事情:

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数据库如何寻找这种结构?

【问题讨论】:

标签: php mysql database-design


【解决方案1】:

对于多层次的分类

id | category_name | slug | parent_id

考虑一下这个设计

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-10-03
      • 2018-09-03
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      相关资源
      最近更新 更多