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やニコニコ動画が貼り付け可能な匿名画像掲示板です。27ジャンルに分かれた掲示板に、それぞれ100スレッドまで立てることが可能です。
  • ツイータンTwitter APIを使って10分おきに収集したTwitter(ツイッター)のトレンドワードや人気ハッシュタグデータを月別に集計してランキング形式で公開しています。
  • Keyword Tool++Yahoo APIや楽天サイトのデータを日次で収集したデータを元に、EC系キーワードをラインキング形式でご紹介しています。各ワードは検索ボリュームや関連語、24か月の検索ボリュームトレンドを確認も可能です。
  • 消費者金融の泉カードローン商品を取り扱う金融業者を一覧で比較可能としたサイトです。カテゴリ別、人気度別、限度額別、金利別に比較可能なサイトにしています。
  • TrendinGファッションモールに出店するブランドをアイテムヒット率でランキングとしたサイトです。まだβ版です。

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

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