回答:
select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position
すべての列名を簡単に取得するには、次のクエリを使用することをお勧めします
Show columns from tablename
SELECT * FROM information_schema.columns
WHERE table_schema = DATABASE()
ORDER BY table_name, ordinal_position
コメントするのに十分な担当者がいないため、ニック・ルーズの優れた答えである(私の見解では)小さな改善WHERE table_schema = 'your_db'
がありWHERE table_schema = DATABASE()
ます。
誰にとっても便利だと思われる場合、これにより、各テーブルの列のカンマ区切りのリストが表示されます。
SELECT table_name,GROUP_CONCAT(column_name ORDER BY ordinal_position)
FROM information_schema.columns
WHERE table_schema = DATABASE()
GROUP BY table_name
ORDER BY table_name
注:列数が多いテーブルや長いフィールド名を持つテーブルを使用する場合は、データが切り捨てられる可能性があるgroup_concat_max_len制限に注意してください。
<?php
$table = 'orders';
$query = "SHOW COLUMNS FROM $table";
if($output = mysql_query($query)):
$columns = array();
while($result = mysql_fetch_assoc($output)):
$columns[] = $result['Field'];
endwhile;
endif;
echo '<pre>';
print_r($columns);
echo '</pre>';
?>
@suganyaによって投稿された回答と同様に、これは質問に直接回答しませんが、単一のテーブルのより速い代替手段です。
DESCRIBE column_name;
質問は:
すべてのテーブルをリストする必要なく、MySQLのすべてのテーブルからすべての列名を取得する高速な方法はありますか?
各列のすべての情報を取得するSQL
select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position
すべての列名を取得するSQL
select COLUMN_NAME from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position
私はこの愚かなことをずっと前に書いて、今でも実際にそれを使っています:
https://gist.github.com/kphretiq/e2f924416a326895233d
基本的には、各テーブルで「SHOW TABLES」、次に「DESCRIBE」を実行し、それをマークダウンとして吐き出します。
「if name」の下を編集するだけです。pymysqlをインストールする必要があります。
いくつかの読みやすいphpでニコラの答えに便乗
$a = mysqli_query($conn,"select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position");
$b = mysqli_fetch_all($a,MYSQLI_ASSOC);
$d = array();
foreach($b as $c){
if(!is_array($d[$c['TABLE_NAME']])){
$d[$c['TABLE_NAME']] = array();
}
$d[$c['TABLE_NAME']][] = $c['COLUMN_NAME'];
}
echo "<pre>",print_r($d),"</pre>";