3

因此,我希望category (x)在我的网站上提供样式产品数量。

我目前正在使用 MySQL。

我的类别表如下所示: Categories (Id, TreeLeft, TreeRight, Level, Name)- 'Level' 是节点深度。

输入的类别如下所示: 在此处输入图像描述

我的项目 > 类别关系表如下所示: ItemCategories (ItemId, CategoryId)

假设我有:

  • “TUBE”下的 1 项
  • “LCD”下的 2 个项目
  • 'FLASH' 下的 1 项
  • “2 WAY-RADIO”下的 1 项

我怎样才能最有效地查询我的项目(大数据库)+类别(4000个数据库),以产生:

电子产品 (5)
 - 电视 (3)
   - 管 (1)
   - 液晶显示器 (2)
 - 便携式电子产品 (2)
   - MP3 播放器 (1)
    - 闪光 (1)
   - 2 路收音机 (1)

注意只返回那些包含产品的类别,并正确地将它们计算在树上。

非常感谢任何帮助。

编辑:在本地重新创建环境的数据库代码:

如果不存在“类别”,则创建表(
  `Id` int(11) NOT NULL auto_increment,
  `TreeLeft` mediumint(7) NOT NULL,
  `TreeRight` mediumint(7) NOT NULL,
  `Level` tinyint(3) NOT NULL,
  `名称` varchar(255) NOT NULL,
  唯一键`Id`(`Id`),
  KEY `TreeLeft` (`TreeLeft`)
) 引擎=MyISAM 默认字符集=latin1 AUTO_INCREMENT=11 ;

插入`Categories`(`Id`、`TreeLeft`、`TreeRight`、`Level`、`Name`)值
(1, 1, 20, 1, '电子学'),
(2, 2, 9, 2, '电视'),
(3, 10, 19, 2, '便携式电子产品'),
(4, 3, 4, 3, '管'),
(5, 5, 6, 3, 'LCD'),
(6, 7, 8, 3, '等离子'),
(7, 11, 14, 3, 'MP3 播放器'),
(8, 15, 16, 3, 'CD 播放器'),
(9, 11, 14, 3, '2 Way Radios'),
(10、12、13、4,“闪光”);

如果不存在`ItemCategories`,则创建表(
  `CategoryId` int(11) NOT NULL,
  `ItemId` int(11) 非空,
  KEY `CategoryId` (`CategoryId`)
) 引擎=MyISAM 默认字符集=latin1;

插入`ItemCategories`(`CategoryId`,`ItemId`)值
(4, 3442),
(5, 3441),
(5, 3456),
(9, 5343),
(10, 5423);
4

1 回答 1

1

请参阅Mike Hillyer 在管理 MySQL 中的分层数据中关于此主题的经典文章的小节,标题为嵌套集中的聚合函数

于 2013-04-23T09:30:02.820 回答