だから私はcategory (x)
私のウェブサイトでスタイルの製品数を提供しようとしています.
現在MySQLを使用しています。
私のカテゴリ テーブルは次のようになります。
Categories (Id, TreeLeft, TreeRight, Level, Name)
- 「レベル」はノードの深さです。
入力されたカテゴリは次のようになります。
マイ アイテム > カテゴリの関係テーブルは次のようになります。
ItemCategories (ItemId, CategoryId)
私が持っていると仮定します:
- 「TUBE」の 1 アイテム
- 「LCD」の2つのアイテム
- 「FLASH」の 1 アイテム
- 「2 WAY-RADIO」の 1 アイテム
アイテム (大規模なデータベース) + カテゴリ (データベースで 4000) を最も効率的にクエリして、以下を生成するにはどうすればよいですか?
エレクトロニクス (5) - テレビ (3) - チューブ (1) - 液晶 (2) - 携帯用電子機器 (2) - MP3 プレーヤー (1) - フラッシュ (1) - 双方向ラジオ (1)
製品を含むカテゴリのみを返すことに注意し、ツリーでそれらを正しくカウントします。
どんな助けでも大歓迎です。
編集: 環境をローカルに再作成する DB コード:
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, 'エレクトロニクス'), (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、「双方向ラジオ」)、 (10、12、13、4、「フラッシュ」); 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);