所以我希望在我的网站上提供category (x)
样式的产品计数。
我目前正在使用MySQL。
我的分类表如下:
Categories (Id, TreeLeft, TreeRight, Level, Name)
- “Level”是节点深度。
输入的类别如下所示:
我的项目>类别关系表看起来像:
ItemCategories (ItemId, CategoryId)
假设我有:
如何最有效地查询我的项目(大型数据库)+类别(4000 in db),以生成:
Electronics (5) - Televisions (3) - Tube (1) - LCD (2) - Portable Electronics (2) - MP3 Players (1) - Flash (1) - 2 Way Radios (1)
注意只返回那些包含产品的类别,并正确地将它们计算在树上。
最值得赞赏的任何帮助。
编辑:数据库代码以在本地重新创建环境:
CREATE TABLE IF NOT EXISTS `Categories` ( `Id` int(11) NOT NULL auto_increment, `TreeLeft` mediumint(7) NOT NULL, `TreeRight` mediumint(7) NOT NULL, `Level` tinyint(3) NOT NULL, `Name` varchar(255) NOT NULL, UNIQUE KEY `Id` (`Id`), KEY `TreeLeft` (`TreeLeft`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ; INSERT INTO `Categories` (`Id`, `TreeLeft`, `TreeRight`, `Level`, `Name`) VALUES (1, 1, 20, 1, 'Electronics'), (2, 2, 9, 2, 'Television'), (3, 10, 19, 2, 'Portable Electronics'), (4, 3, 4, 3, 'Tube'), (5, 5, 6, 3, 'LCD'), (6, 7, 8, 3, 'Plasma'), (7, 11, 14, 3, 'MP3 Players'), (8, 15, 16, 3, 'CD Players'), (9, 11, 14, 3, '2 Way Radios'), (10, 12, 13, 4, 'Flash'); CREATE TABLE IF NOT EXISTS `ItemCategories` ( `CategoryId` int(11) NOT NULL, `ItemId` int(11) NOT NULL, KEY `CategoryId` (`CategoryId`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO `ItemCategories` (`CategoryId`, `ItemId`) VALUES (4, 3442), (5, 3441), (5, 3456), (9, 5343), (10, 5423);