• ベストアンサー
  • すぐに回答を!

テーブルの情報を取得したい

テーブルの情報を取得したい PHP5とPostgreSQL8.4.3を使っています。 フォームにテーブル名を入力して送信すると、そのテーブルの情報(カラム名、型名など)が表示され、 そのテーブルに対してレコードの追加や削除を行いたいのですが方法が分かりません。 どなたか分かる方いらっしゃいましたらお願いします。

共感・応援の気持ちを伝えよう!

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1

まず、前置きです。 表の定義情報などが登録先は、RDBMSによりカタログ、ディクショナリなど管理方式や呼称が異なり、その参照方法も独自のコマンドを使ったり、SQLのSELECT文で行えたりします。 各RDBMSごとにバラバラである「定義情報の参照方法」について、標準SQLで情報スキーマ(information_schema) が規定され、各RDBMSによる実装も進みつつあります。 たとえば、標準SQL準拠で情報スキーマを実装しているRDBMSでは、 表名一覧・・・データベース名、スキーマ名などを条件に、information_schema.tables 表を検索 表の構成列一覧・・・データベース名、スキーマ名、テーブル名などを条件に、information_schema.columns 表を検索 を参照すれば、名称などを同じように得られます。 ただし、データベース、スキーマ、ユーザなどのRDBMSにより概念に違いがあるものは、どの表のどの列に情報を入れているかを確認する必要があります。 さて、列名やデータ型ですが、前述のように information_schemaのcolumns表を検索すれば得られます。 ここで問題になるのは、データ型です。 文字型、数値型、日付型など様々なデータ型があり、また長さを指定するものや指定しないものがありますよね。 単純にchar、varchar、integer、dateなどのレベルの情報であれば、data_type 列で得られるのですが、長さなどの情報はdata_type列の内容により、参照すべき列が異なってきます。 どのレベルまで知りたいのか分かりませんが、実際にcolumns表の内容を確認し、得たい情報を自分なりに調べてみてください。 PostgreSQLの information_schema.columns 表 の詳細については、以下を参照してください。 http://www.postgresql.jp/document/pg830doc/html/infoschema-columns.... information_schema.columns 表 の検索例は、次のような感じです。 select table_schema as scm ,table_name as tbl ,ordinal_position as "no" ,column_name as clm ,data_type ,character_maximum_length ,character_octet_length ,numeric_precision ,numeric_precision_radix ,numeric_scale from information_schema.columns where table_name in('t1','t2') order by table_name,ordinal_position

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • PEAR::MDB2で、データベースの各カラムの型や長さの情報を取得したい

    PEAR::MDB2でデータベース(PostgreSQL)を操作させているのですが、MDB2でデータベースの各カラムの型や長さの情報を取得することって出来ますでしょうか? フォームからデータを入力する時、フォームに入力された値の長さをチェックするのに使ったりするのに便利かとも思ったのですが、探してもそういったMDB2関数が見つかりません。 もし、各カラムの型や長さの情報を取得する方法がありましたら、教えていただければと思います。

    • 締切済み
    • PHP
  • Accessのフォームから削除したレコードをテーブルに保存したい

    Accessを利用してフォームからデータを入力しているのですが、クエリを使わずフォーム画面から不必要なレコードをコマンドボタンで削除しています。削除したレコードをテーブルに保存したいのですが、追加クエリで条件を決めずにフォームの画面から判断したレコードだけを削除し、かつ削除したレコードを削除専用のテーブルに追加する方法を教えてください。よろしくお願いします。

  • Access 指定項目のみの削除

    Accessのレコード削除についてです。 例えば商品テーブルに数値型のID(主キー)、テキスト型の商品名、テキスト型の産地の3カラム構成のテーブルがあったとします。 レコード削除の場合、Excelでいうと行削除のように該当IDの行に含まれる情報をすべて削除すると思うのですが、 これを例えばID番号は残し、商品名と産地のみ削除する…のは可能なのでしょうか。 ちなみに削除を行うのはテーブル上ではなく、新規レコード追加・編集ができる入力用のフォームからボタン操作で行いたいです。 また、サブとしてテーブルとソースを連結させた一覧表示できるフォームにも反映させたいです。→現状は規定値の0が表示されるため、データがなくなった場合0ではなく新規作成時に振られるID番号と同じ1 を表示させたいのですが、なかなかうまくいかず… ぜひご教示ください。

  • SQLiteでカラム情報の取得ってできるんですか?

    SQLiteを使ってみようと思い試しているのですが、カラム名と属性情報の 一覧を表示するコマンドが分かりません。 調べてもどうも見つからないので教えていただきたいと思います。 MySQLやOracleなんかでしたら、desc table名; という構文でカラム情報を 取得することができますが、SQLiteではできないようです。 .helpコマンドで調べてみても、テーブル一覧は見つかりますがカラム一覧は出てきません。 ご存知の方教えていただけると助かります。

  • クエリー : テーブル一覧&定義情報取得

    手元にOracleがなく、実際にクエリーを投げて試すこともできず困っています。以下について教えて下さい。 1.Oracleにて、自分で作ったテーブルの名前の一覧を取得するクエリーを教えて下さい。 2.各テーブルにおいて、定義情報(カラム名、カラムサイズetc)を取得するクエリーを教えて下さい。 よろしくお願いします。

  • TIMESTAMP型が含まれるテーブルの列名の取得

    Oracle 11gを使用しているSQL初心者です。 テーブルの列名を取得する方法についての質問です。 テーブルの列名を取得するときは以下のSQLで取れると思っています。 select column_name from user_tab_columns where table_name = 'テーブル名'; --実行結果-- COLUMN_NAME ------------------------------ NAME1 NAME2 しかし、テーブルにTIMESTAMP型が含まれていると 「レコードが選択されませんでした。」 と表示されます。 TIMESTAMP型が含まれるテーブルは上記のSQLでは取得できないのでしょうか。 TIMESTAMP型が含まれるテーブルの列名の取得方法をご存知の方がいらっしゃいましたら、 ご教示ください。よろしくお願い致します。

  • (ACCESS)連番取得について

    アクセスで顧客管理をしています。 DMax関数を用いて、レコードを追加する度に自動で連番を振る設定に したいと思っていますが、上手くいかないため質問させてください。 【テーブル名】T_顧客一覧 【入力用のフォーム名】F_顧客登録 【連番を入力させたい項目(フィールド名)】No(テーブルでは主キーに設定) とし、フォームの”No”の既定値に   =DMax("No","T_顧客一覧")+1 と入力するのですが、フォームには1としか表示されません。 非常に初歩的な質問だとは思うのですが、 何か原因として考えられることがありますでしょうか? 情報が足りないようでしたら補足させていただきます。 よろしくお願いします。

  • SELECT/別テーブルのレコード数も取得したい

    ■環境 ・MySQL ■前提 ・テーブルA … idカラム ・テーブルB … A_idカラム ■やりたいこと ・テーブルAデータを取得する際、テーブルAレコードに応じて、テーブルB「A_idカラム」の数(レコード数)も取得したい ■取得イメージ例 ・テーブルA「全カラム」、「count」カラム ※「count」カラム … テーブルBにある「A_idカラム」の数 ■知りたいこと ・どこにも存在しないこの「count」カラムはどうやって作成したら良いでしょうか? ・全体のSQL文

    • ベストアンサー
    • MySQL
  • データベースのテーブルやカラム情報の取得

    データベースの定義を取得するSQL文を教えてください。 データベースはAccessとMySQLです。 得たい情報はデータベースにあるテーブルとカラムです。 例えば、テーブルがTblAとTblBがあって、 それぞれに整数型のFld1と文字型のFlb2があるとします。 この定義情報を取得したいのです。 テーブルだけでなくクエリ(ビュー)の定義情報も取得できるでしょうか。

    • ベストアンサー
    • MySQL
  • postgresqlにて全レコードのupdate

    PostgreSQLの全レコードを順次Updateしたいのですが、 SQLの記述方法がわかりません。 [やりたいこと] ユーザ情報を保持しているテーブルに、新しく"ID_TMP"カラムを追加。 カラム"ID_TMP"に、ユーザIDを保持しているカラム"ID_INFO"の内容を書き込む。 コピーしたいレコードが単一の場合、次のSQLで可能だと思うのですが、 テーブルに保持している全レコードを順次処理する方法を教えてください。 update [テーブル名] set ID_TMP = (select ID from [テーブル名] where id = [ID名]); 宜しくお願いいたします。