简单的方法是构造一个表,如:
类别
CategoryID
ParentID
姓名
您的数据如下所示:
1, 0, '桌面和移动应用程序'
2, 1, 'Android 应用程序'
3, 2, '游戏'
4, 3, '动作'
5, 1, '游戏'
6, 5, '动作'
7, 5, '冒险'
8, 0, '桌面应用'
9, 8, '游戏'
你会像这样查询它:
select * from Categories where ParentId = 1
这将返回 Android 应用程序和游戏。要获得您select * from Categories where ParentId = 5
将返回动作和冒险的游戏的子类别。
更新
为了将单个项目与多个类别相关联,您将需要一个附加表:
xref_CategoriesItems
CategoryId
ItemId
这将允许任何单个项目与多个类别相关联。假设您有一个桌面应用程序需要同时出现在桌面应用程序 > 游戏和桌面和移动应用程序 > 游戏中。
您的表将包含项目 1 的以下数据:
3、1
9、1
当查看特定类别中的项目时,您将执行以下操作:
select I.*
from items I
inner join xref_CategoriesItems XCI on (XCI.ItemId = I.ItemID)
WHERE (XCI.Category = @CategoryId)
要查看特定项目属于哪些类别:
select C.*
from categories C
inner join xref_CategoriesItems XCI on (XCI.CategoryId = C.CategoryId)
where (XCI.ItemId = @ItemId)
如果您需要所有子记录,则查询特定类别下的所有项目会稍微复杂一些。基本上,您需要将 xref_categories 与类别进行递归连接以获取子项。我不记得如何在 MySQL 的 sql 版本中表达它;但是以下内容可能很好了解:Using MySQL query to traverse rows to make a recursive tree