2011-08-24 10 views
10

私たちのデータベース内の特定のフィールドだけに適用するコードを書く必要があります。具体的には、私は、DECIMAL(12,5)型の単一データベースのすべてのテーブル内のフィールドを探しています。MySQLはデータ型== Xの列名を取得します

もし何か助けがあれば、すべての10進数フィールドの先頭にdec_が付きます。私はすべてのテーブルからすべての小数フィールドを集めることができますが、私の特定の条件に一致しないそれらのトンがあります、私は小数点の値は誰が限界12.5が必要です。

私はこれをpure SQLで行うことと、PHPを使用することの間で優先する必要はありません。私たちは現在、CakePHPフレームワークを使ってプロジェクトを管理していますが、フレームワークを使用せずに簡単にこれを行うこともできます。これは、必要なデータを収集するための1回の操作であり、監査を継続することができます。

何か助けていただければ幸いです。お読みいただきありがとうございます。

[編集]ここでいくつかの素晴らしい回答をいただき、ありがとうございました!私はおそらく私の最初の投稿でこれを述べたはずですが、私はまた、各フィールドに関連付けられているテーブル名を得ることができる方法はありますか?

答えて

18
SELECT 
    TABLE_NAME, 
    COLUMN_NAME 
FROM 
    INFORMATION_SCHEMA.COLUMNS 
WHERE 
    TABLE_SCHEMA = 'db-name' AND 
    DATA_TYPE = 'decimal' AND 
    NUMERIC_PRECISION = 12 AND 
    NUMERIC_SCALE = 5 
+0

このサイトを試してみてはとても気素晴らしいです!すばやく正確な回答をいただきありがとうございます。私はあなたの回答を投票したいと思いますが、まだ十分な担当者がいません:-( – Zetaphor

+0

あなたの質問に対する正しい回答としてマークすることができます;) – Crack

+2

あなたは 'COLUMN_TYPE = 'decimal(12、 5) ''最も重要なことに、OPはINFORMATION_SCHEMAデータベースにアクセスする必要があります。 – webbiedave

2

次のアプローチを使用しようとすることができます:

$pdo = new PDO(...); 

$sql = "select column_name from 
    information_schema.columns 
    where table_schema='$your_db' and table_name='?' and data_type = 'decimal(12,5)'"; 

foreach($pdo->query("SHOW TABLES;") as $table) { 
    $prepared = $pdo->prepare($sql); 
    $prepared->execute(array($table)); 
    print_R($prepared->fetchAll()) ; 
} 
0

この

SELECT table_name, column_name 
FROM information_schema.columns where data_type = 'INT' 
関連する問題