【问题标题】: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>