3

だから私は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);
4

1 に答える 1