私が抱えている問題は次のとおりです。私の会社のサプライヤから、製品情報を含むAccessデータベース(SQL Serverにインポート)が提供されており(代わりにXMLを使用することもできます)、これをより使いやすい形式に変換しようとしています。 eコマースWebサイトで使用します。
私が遭遇した問題、そしておそらく私がはっきりと考えていないのは、それらのカテゴリ情報が3〜6個のサブカテゴリの深さである可能性があることです。常に少なくとも2つのカテゴリ(最上位の親カテゴリとより具体的なサブカテゴリ)がありますが、アイテムによっては最大6つまで存在する可能性があります。
それらのデータは、次のテーブル構造で提供されます。
CREATE TABLE [dbo].[ECDB2_HIERARCHY](
[SEQ_ID] [int] NOT NULL,
[PFX_NUM] [nvarchar](3) NOT NULL,
[STK_NUM] [nvarchar](12) NOT NULL,
[ECDB2_LVL_1] [nvarchar](max) NULL,
[ECDB2_LVL_1_ID] [int] NULL,
[ECDB2_LVL_2] [nvarchar](max) NULL,
[ECDB2_LVL_2_ID] [int] NULL,
[ECDB2_LVL_3] [nvarchar](max) NULL,
[ECDB2_LVL_3_ID] [int] NULL,
[ECDB2_LVL_4] [nvarchar](max) NULL,
[ECDB2_LVL_4_ID] [int] NULL,
[ECDB2_LVL_5] [nvarchar](max) NULL,
[ECDB2_LVL_5_ID] [int] NULL,
[ECDB2_LVL_6] [nvarchar](max) NULL,
[ECDB2_LVL_6_ID] [int] NULL
ほとんどの場合、SEQ_IDは使用されていないため、無視できます。PFX_NUMとSTK_NUMは連結されて、製品のSKUを形成しますが、それは問題ではありません。サイトからカテゴリを動的にトラバースできる必要があります。たとえば、次の行があるとします。
SEQ_ID: 364867 (ignored)
PFX_NUM: AMP
STK_NUM: 73121
ECDB2_LVL_1: Office Supplies
ECDB2_LVL_1_ID 11
ECDB2_LVL_2: Envelopes, Mailers & Shipping Supplies
ECBD2_LVL_2_ID: 26
ECDB2_LVL_3: Envelopes
ECDB2_LVL_3_ID: 195
ECDB2_LVL_4: Business Letter Envelopes
ECDB2_LVL_4_ID: 795
ECDB2_LVL_5: (empty)
ECDB2_LVL_5_ID: 0
ECDB2_LVL_6: (empty)
ECDB2_LVL_6_ID: 0
ユーザーはレベルをナビゲートできるはずですが、データが提供されているサンプルWebサイト(以下を参照)は、サブカテゴリの下のすべてのアイテムをランダムな間隔で表示します...第3レベル(ecdb2_lvl_3)のように見えます)ただし、第3レベルがないアイテムの場合は、第2レベルから表示されます。スキーマからわかるように、自己参照カテゴリテーブルや結合製品テーブルのようなものではなく、製品とそれに属するすべてのカテゴリを一覧表示する1つのテーブルにすべてがまとめられています。
問題は、一部のアイテムには2つのレベルしかないことです。このようなアイテムには、最大4つのレベルがあり、6つすべてのアイテムがいくつかあります。ベンダーのサンプルWebサイトで、http://www.biggestbook.comから入手できます。私が望むことはうまくやっていますが、私は彼らのコードにアクセスできないので、彼らがカテゴリーをどれだけ正確に引き戻してトラバースしているかについて頭を悩ませています。彼らはあなたが現在どのレベルにいるのかを示す何らかのグローバルフラグを持っていると思います(たとえば、事務用品の場合は1、封筒の場合は2など)。これにより、現在の深度を追跡できます。次に、各サブレベルをチェックして、表示するサブカテゴリが他にもあるかどうかを確認しますが、これを効率的に処理する方法を考えると、空白を描画しています。それらの命名スキームにも多くの要望がありますが、必要に応じて後で取り組むことができます。
この問題に取り組む方法について誰かアドバイスがありますか?私はC#/ ASP.NET(おそらくMVC、おそらくそうではない)でストアを計画しているので、C#の例が最も役立ちますが、ほとんどの言語を簡単に理解できます。