[PHP-users 23347]Re: データベース内のすべてのテーブルについてあるsql文を実行したい

UNO Shintaro uno @ venus.dti.ne.jp
2004年 9月 19日 (日) 10:55:01 JST


>しかしそれにしてもスクリプトがごちゃごちゃして大変です。
>『データベース内のすべてのテーブルについてある sql 文を
>実行したい』ということは、まれではなく行う操作かと思いま
>す。PHPで関数を用意してくれていれば…など思ってしまいま
>す。(PHPが初めての言語でなおかつ初心者の弁)

それはデータベースのテーブル設計方針に問題があるように思えます。
他の方がテーブルを設計していらっしゃるのなら、一度その方とご相談なさっ
た方がよろしいかと思います。


共通した構造を持っている、まとめて操作したいデータがあるのなら、1つの
テーブルに入れるのが普通の方法です。データを分類すべき理由があるのなら、
その理由をデータ自体で表現します。
Excelで例えると、ブックやシートを分けるかわりに、分類理由の列を付けて
フィルタを使いましょう、ということです。SQLのselect文はExcelのフィルタ
を遥かに協力にした“フィルタのお化け”みたいなものです。

例えば、syoseki_18,syoseki_257,syoseki_3457のようにテーブルを分けるの
ではなく、代わりにsyosekiというテーブル1つだけを用意します。このテーブ
ルにはbunruiという欄を追加します。従来syoseki_18に入れていたデータは、
bunruiを18にしてsyosekiテーブルに入れます。syoseki_257やsyoseki_3457に
入れていたデータも同様に、bunruiを257、3457にしてsyosekiに入れます。

そうすると次のように1つのselect文でまとめて操作できるようになります。

操作例: 全データを取り出す
SELECT id, kara, made, number, name, syozoku, syoseki
FROM syoseki

操作例: syoseki_18に相当するデータだけを取り出す
SELECT id, kara, made, number, name, syozoku, syoseki
FROM syoseki WHERE bunrui=18

-- 
UNO Shintaro, 宇野 信太郎
mailto:uno @ venus.dti.ne.jp
http://www.venus.dti.ne.jp/~uno/


PHP-users メーリングリストの案内