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 > 趣味とスポーツ > 自動車カテゴリのような形で、親カテゴリが異なるカテゴリ同士をリンクで接続させることができました。

おわりに

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

PHPが学べるおすすめプログラミングスクール

この運営ブログをみて、もしdtn.jp管理人のようにサイトをゼロから作ってみたいという思いに駆られた方は、サイト開発やプログラミングをオンラインで受講できるプログラミングスクールの活用をしてみてはいかがでしょうか。サーバ/WordPress/HTML/CSS/JS/PHP/SQLなどの基本さえ分かれば、ゼロからサイト立ち上げもポンポンできるようになって、今なら仕事や転職にも役立つのでオススメです。

PHPも学べるオンラインスクール

  • CodeCampAWS Cloud9を使ったクラウド上のIDEが用意されているので、ネットにつながればスタート開始可能というゴージャスなスクールです。講師も選べて、Webマスターコースならプログラミング経験0でも一気にフロントエンドからバックエンドまでマスターできます。
  • ウェブカツJava言語やRuby言語なんぞ教えん!という、初心者にありがちな挫折ポイントがよく分かってるスクールです。フロントエンドエンジニアに必要なスキルセット&PHPがマスターできます。
  • フリークス HTML/CSSから始まり、MySQLやLinuxからPHPの変数や分岐やループ、クラスやPDOに最後はMVCまで教えてくれるので、そこまで分かればなんでもできそうです。メンターに質問もし放題がいいですね。
  • テックアカデミー法人のIT研修もやってる業界最大手・受講者数No.1のスクールです。メンターとの定期オンライン面談やチャットサポートなどもあり、大手ならではインフラ環境がウリです。PHPと合わせてjQueryもマスターできる、PHP/Laravelとフロントエンドコースがおすすめです。

オンラインスクールのデメリット

孤独になりがちなサイト制作も、優しいメンターがそばにいてくれれば凄い楽しそうですが、もちろんデメリットもあります。お金がかかるという点です。ひたすらググって、本を読んでよりは確実にコストがかかってしまいます。とはいえ、多少の余裕があるなら、こんなご時世なので時間と労力を買った方が良いと思います。