
http://oshiete.nikkeibp.co.jp/kotaeru.php3?q=267 …
会社の組織図を作成したいと考えております。
データベース(PostgreSql)の部門マスタを元に、会社組織図をツリー状に表示したいのです。
データベース構造は
'100';'会社';'101';'経営企画';'';'';'';'';'';''
'100';'会社';'102';'事業統括';'';'';'';'';'';''
'100';'会社';'200';'A本部';'';'';'';'';'';''
'100';'会社';'201';'B本部';'301';'事業管理部';'';'';'';''
'100';'会社';'201';'B本部';'302';'企画部';'';'';'';''
'100';'会社';'201';'B本部';'303';'総務部';'401';'人事課';'';''
'100';'会社';'201';'B本部';'303';'総務部';'402';'総務課';'';''
上記データを下記のイメージにしたいのです。
(見にくいですが・・・)
http://www.geocities.jp/cayanon/sample1.bmp
色々と試してみましたが、
適用できるものがなかったので・・・
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
データベースがPostgreSQLであれば、参考URLにあるconnectbyを
使えば、階層構造をSQL文を1本で取得可能だと思います。
ただし、connectbyは標準では使用できないようなので、
ファンクションの登録が必要なようです。
詳しくは参考URLを見てください。
参考URL:http://www.thinkit.co.jp/cert/marugoto/2/1/23/2. …
No.2
- 回答日時:
何をアドバイスすればいいのか、この質問からは判断できないのですが?
>データベース構造は
重複する情報が多数あり、テーブルの検索結果のような内容になっていますが?
普通に考えれば、
部門マスタ(部門コード、部門名、上位部門コード)
という構成でいいと思います。
最上位の部門には、「上位部門コード」としてnullを入れれば階層を辿れます。
【最上位のデータ検索】
select * from 部門マスタ
where 部門名=? ←会社名など
and 上位部門コード is null;
2階層目以降は、上位の階層の検索で得た部門コードを利用して検索して行くことになります。
【2階層目以降】
select * from 部門マスタ
where 上位部門コード=? ←上位階層で得た部門コード
order by 部門コード;
SQLを知りたいのか、特定の言語でSQLを発行する方法が知りたいのかといったことが触れられていないので、何を回答すればいいのでしょうか?
No.1
- 回答日時:
データベースの構造がおかしいような気がします。
「部門コード、部門名、すぐ上の部門コード、最上位部門フラグ」
このようになるのではないでしょうか。
あとはプログラムの世界なので、ここでいうのもあれですが、
1階層目:
最上位部門フラグがtrueのものを取得
部門名を1階層目として表示
部門コードを一覧として取得(1)
2階層目:
(1)で取得した部門コード一覧がすぐ上の部門コードとなる部門を取得
部門名を2階層目として表示
部門コードを一覧として取得(2)
3階層目:
(2)で取得した部門コードがすぐ上の部門コードとなる部門を取得
部門名を3階層目として表示
:
:
(以下同じ、4階層目・5階層目と続く)
この回答への補足
すみません、言葉足らずで・・・
データベース構造は
部門マスタ(部門コード、部門名、上位部門コード)
101,経営企画,null
102,事業統括,null
200,A本部,null
201,B本部,null
301,事業管理部,200
302,企画部,200
303,総務部,200
401,人事課,303
402,総務課,303
だとして、下記ツリーソースにPHPを使って当てはめたい。
Javascriptにてツリー状にするソース
▼<A href="javaScript:tree('b_100')">会社</A><BR>
<DIV id='b_100' style='display:none'>
-<A href='b_101'>経営企画</A><BR>
-<A href='b_102'>事業統括</A><BR>
▼<A href="javaScript:tree('b_201')">A本部</A><BR>
<DIV id='b_201' style='display:none'>
-<A href='b_301'>事業管理部</A><BR>
-<A href='b_302'>企画部</A><BR>
▼<A href="javaScript:tree('b_303')">総務部</A><BR>
<DIV id='b_303' style='display:none'>
-<A href='b_401'>総務課</A><BR>
-<A href='b_402'>人事課</A><BR>
</DIV>
</DIV>
▼<A href="javaScript:tree('b_200')">B本部</A><BR>
</DIV>
<SCRIPT language='JavaScript'>
<!--
function tree(LinkName) {
ls = document.all[LinkName].style;
if(ls.display == 'none') {
ls.display = 'block'
} else {
ls.display = 'none'
}
}
//-->
</SCRIPT>
データベース構造やjavascriptのソースをどのように書けばいいのか
アドバイスをお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows10がインストールできま...
-
エクセルで縦のカラムデータを...
-
Ophcrackについて
-
postgresqlのtableのカラムの型...
-
php、postgresqlを使ってwebア...
-
三段論法を真理値表で証明する
-
sqlの中で、 例えば条件句で AN...
-
tesuto 01
-
python3.12のインストール方法
-
Pythonで2つのデータ(キー無し...
-
数値が定期的にあらわれる文字...
-
終端クォート ' が必要です と...
-
PostgressからMySQL(MariaDB)...
-
【PostgreSQL】行の値の並びを...
-
列が存在しないと言われる
-
PostgreSQL14.6のSSL対応について
-
ポストグレにあるExcelファイル...
-
PostgreSQL レコードからアイテ...
-
文字切り替えの時に 中央にでる A
-
postgreSQL カラムの全ての値を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessで最新のレコード...
-
複数のテーブル結合
-
直近データ抽出 VS WHERE文
-
件数指定での取得
-
クエリ式でDcount の代わりは?
-
年、月、日を取得する関数
-
pl/pgsqlで再帰呼び出しは可能...
-
特定の月の日付を一覧で取得したい
-
【SQL】他テーブルに含まれる値...
-
フラグをたてるってどういうこ...
-
SELECT INTOで一度に複数の変数...
-
sqlに記述できない文字
-
SQLサーバに対するSQL文で抽出...
-
UPDATEで既存のレコードに文字...
-
エラーを起こす方法
-
truncate tableを使って複数の...
-
既存データをINSERT文にして出...
-
timestampのデータはどのように...
-
オラクルのUPDATEで複数テーブル
-
SQLで、Join句で結合したテ...
おすすめ情報