SQLで階層構造を扱う方法

dtn.jpのディレクトリはSQLでカテゴリ情報や階層構造を管理しています。そこで重要となるのがSQLでの階層構造データの保持です。

下記のような階層構造をテーブルで保存するには少々小細工が必要となります。

┬─A
├─B─D
│ ├─E
│ └─F
└C

テーブル内で階層構造を保持するために参考としたのがこちらの掲示板記事でした。

要は、テーブル内で保持する各カテゴリの情報に親カテゴリの番号を持たせておけば、階層構造を二次元的に保持することができるといった感じです。

dtnディレクトリでもこのような感じでカテゴリ用テーブルを作ってみました。

+-------------+----------------------+--------+
| cate_id | name | parent |
+-------------+----------------------+--------+
| 1 | エンタメ | NULL |
| 2 | 芸術と人文 | NULL |
| 3 | ビジネスと経済 | NULL |
| 4 | 音楽 | 1 |
| 5 | お笑い、ユーモア | 1 |
| 6 | 外国のアート | 2 |

プログラムで階層に出力

このカテゴリテーブルの情報を元にして、HTMLファイルをディレクトリ構造で出力したり、下記のようなパンくずリストを生成したりしていきます。

トップページ > コンピュータとインターネット > インターネット > ホームページ、ウェブサイト

階層構造を複雑化させたい

当初はテーブル構造を単純にディレクトリに出力させるで満足しておりましたが、運用していくうちに次第に欲がでてきました。

例えば、親カテゴリが全く別のカテゴリを下層にリンクとして表示したいといったパターンです。

┬─趣味とスポーツ
│ └─自動車
│   └─★
│
├─ビジネスと経済
│ └─ショッピングとサービス
│   └─自動車、オートバイ
│      └─メーカー、ブランド(これを★に)
└─政治

「趣味とスポーツ > 自動車」の階層下の★部分に、全く異なるカテゴリにある「ビジネスと経済 > ショッピングとサービス > 自動車、オートバイ > メーカー、ブランド」を表示させたいといった場合です。

SQLのテーブル構造をプログラムで吐き出すため、これをやるには手で修正をかける必要がありましたが、これをプログラムで実現できるように管理画面やHTML生成プログラムに修正をかけました。

結果、このディレクトリ型検索エンジンdtn > 趣味とスポーツ > 自動車カテゴリのような形で、親カテゴリが異なるカテゴリ同士をリンクで接続させることができました。

おわりに

訪問された方にとっては、ほとんど全くどうでもよいことで、気が付きもしないとは思いますが、自己満足のプログラム修正作業をしたというご報告でした。

ABOUT dtn.jp

この運営ブログをみてdtn.jpの運営サイトに興味をお持ちになった方は下記のリンク集からサイトをご参照ください。PHP・SQL・JS・HTML・CSSや様々なAPIでゼロから立ち上げたサイトを複数運営しています。

dtn.jp関連サイト

  • ディレクトリ型検索エンジンdtn大手は全てサービスを終了してしまい、中小でも運営を継続するところがほとんど無くなったディレクトリ型検索エンジンを、2002年から細々運営しております。今も申請されたサイトは実際に管理人が訪問して確認後に登録しています。是非登録どうぞ。
  • 猫ネコサーチエンジン猫・ペットサイト専用のディレクトリ型検索エンジンです。登録サイトはサイトのスクリーンショット付きでカテゴリに掲載をいたします。
  • 画像掲示板の泉画像・YouTube・ニコニコ動画・Tiktokの貼り付けが可能な匿名画像掲示板です。27ジャンルに分かれた掲示板に、それぞれ100スレッドまで立てることが可能です。
  • ツイータンTwitter APIを使って10分おきに収集したTwitterトレンドワード・人気ハッシュタグデータを、月別に集計してランキング形式で公開しています。年間トレンドワードも公開中。
  • Keyword Tool++Yahooショッピングや楽天のトレンドワードデータを日次収集し、EC系の人気キーワードをラインキング形式でご紹介しています。各ワードの検索ボリュームや関連語、24か月の検索ボリュームをグラフで確認が可能です。
  • 消費者金融の泉カードローン商品を取り扱う金融業者を一覧で比較可能としたサイトです。カテゴリ別、人気度別、限度額別、金利別に比較可能です。
  • TrendinGファッションブランドを人気アイテムヒット率でランキング化し、一覧でご紹介しているサイトです。

各サイトの開発方法などについて

各サイトの開発方法や運用トラブルについては、当ブログで不定期にご紹介しています。Twitterで新着記事のお知らせもしています。宜しければフォロー下さい。