私はPHPで配列にmysqlテーブルのすべてのcol名を取得したいですか?
このためのクエリはありますか?
最善の方法は INFORMATION_SCHEMA メタデータ仮想データベースを使用することです。具体的には INFORMATION_SCHEMA.COLUMNS table ...
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
それは非常に強力で、テキストを解析する必要なしにあなたにたくさんの情報を与えることができます(例えば、列タイプ、列がNULL可能であるかどうか、最大列サイズ、文字セットなど)。
ああ、それは標準SQLです(SHOW ...
はMySQL固有の拡張です)...
SHOW...
とINFORMATION_SCHEMA
テーブルの使用の違いについての詳細は、MySQL INFORMATION_SCHEMA
に関するドキュメント全般 ...を参照してください。
あなたはMYSQLのために次のクエリを使うことができます:
SHOW columns FROM your-table;
以下は、列の名前をリストするためにphpで上記の構文を実装する方法を示すサンプルコードです。
$sql = "SHOW COLUMNS FROM your-table";
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result)){
echo $row['Field']."<br>";
}
SHOW COLUMNS FROM TABLE
の出力についての詳細は、 MySQL Refrenceを参照してください。
2つの方法があるようです。
DESCRIBE `tablename`
または
SHOW COLUMNS FROM `tablename`
DESCRIBE
の詳細はこちら: http://dev.mysql.com/doc/refman/5.0/en/describe.html
私は過去にこれをしました。
SELECT column_name
FROM information_schema.columns
WHERE table_name='insert table name here';
編集 :今日、私はこれを行うためのより良い方法を学びました。 ircmaxellの答えを見てください。
SHOW COLUMNS FROM table;
の出力を解析する
ここにそれについての詳細がここにあります: http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
古いPHP関数 "mysql_list_fields()"は非推奨です。そのため、今日、フィールドの名前を取得するための最善の方法は、 "テーブル名からテーブル名を表示[LIKE '名前']"というクエリです。だから、ここで小さな例です:
$fields = array();
$res=mysql_query("SHOW COLUMNS FROM mytable");
while ($x = mysql_fetch_assoc($res)){
$fields[] = $x['Field'];
}
foreach ($fields as $f) { echo "<br>Field name: ".$f; }
すべての列データを表示するにはmysql_fetch_field()
を使用してください。 manual を参照してください。
$query = 'select * from myfield';
$result = mysql_query($query);
$i = 0;
while ($i < mysql_num_fields($result))
{
$fld = mysql_fetch_field($result, $i);
$myarray[]=$fld->name;
$i = $i + 1;
}
「警告この拡張子はPHP 5.5.0の時点では推奨されておらず、将来削除される予定です。」
function get_col_names(){
$sql = "SHOW COLUMNS FROM tableName";
$result = mysql_query($sql);
while($record = mysql_fetch_array($result)){
$fields[] = $record['0'];
}
foreach ($fields as $value){
echo 'column name is : '.$value.'-';
}
}
return get_col_names();
すべてのテーブル構造をいくつかのファイルでチェックしたい場合は、このコードを使用してください。このクエリで私はより多くの詳細のためにcolumn_name、column_typeおよびtable_nameを選択します。私はそれを簡単に見ることができるように私はcolumn_typeによる順序を使用します。
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' order by DATA_TYPE;
あなたが提出されたダブルタイプのみを確認したい場合は、あなたはそれを簡単に行うことができます
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME,DATA_TYPE
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' AND DATA_TYPE like '%bigint%' order by DATA_TYPE;
どのフィールドがnull型などを許可するかを確認したい場合は、これを使用できます。
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME,IS_NULLABLE,DATA_TYPE
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' and DATA_TYPE like '%bigint%' and IS_NULLABLE ='NO' order by COLUMN_TYPE;
あなたはより多くをチェックしたいです、そして、厚いリンクもあなたを助けます。
これを試してみてください私は個人的に使っています:
SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name'
これがあなたが探していたものかどうかわからないが、これは私のために働いた:
$query = query("DESC YourTable");
$col_names = array_column($query, 'Field');
これはあなたのテーブルまたは配列内のカラム名/変数名の単純な配列を文字列として返します。これはMySQLクエリを動的に構築するために必要なものです。私の欲求不満は、PHPの配列にインデックスを付ける方法があまりよくわからないということでした。そのため、DESCまたはSHOWの結果でどうすればよいかわかりませんでした。私の答えが私のような初心者に役立つことを願っています!
結果を確認するには:print_r($col_names);
SHOW COLUMNS mysql 5.1(5.5以外)では、一時ディスクテーブルを使用します。
そのため、場合によっては遅いと考えることができます。少なくとも、 created_tmp_disk_tables の値を上げることができます。接続ごとまたはページ要求ごとに1つの一時ディスクテーブルを想像してください。
SHOW COLUMNS ファイルシステムキャッシュを使用している可能性があるため、実際にはそれほど遅くはありません。 Phpmyadminは一貫して〜0.5msを言っています。これは、ワードプレスページを提供する500ミリ秒から1000ミリ秒のサービスと比較しても何もありません。しかし、それでも重要なことがあります。ディスクシステムの関与があります、あなたは、サーバーがビジー、キャッシュがいっぱい、hddが失速した時などに何が起こるかわかりません。
SELECT * FROM ... LIMIT 1 を使用して列名を取得すると、約0.1ms前後になり、クエリキャッシュも使用できます。
それで、ここでは、可能であれば show columns を使用せずに、テーブルから列名を取得するための私のちょっと最適化されたコードです:
function db_columns_ar($table)
{
//returns Array('col1name'=>'col1name','col2name'=>'col2name',...)
if(!$table) return Array();
if(!is_string($table)) return Array();
global $db_columns_ar_cache;
if(!empty($db_columns_ar_cache[$table]))
return $db_columns_ar_cache[$table];
//IMPORTANT show columns creates a temp disk table
$cols=Array();
$row=db_row_ar($q1="SELECT * FROM `$table` LIMIT 1");
if($row)
{
foreach($row as $name=>$val)
$cols[$name]=$name;
}
else
{
$coldata=db_rows($q2="SHOW COLUMNS FROM `$table`");
if($coldata)
foreach($coldata as $row)
$cols[$row->Field]=$row->Field;
}
$db_columns_ar_cache[$table]=$cols;
//debugexit($q1,$q2,$row,$coldata,$cols);
return $cols;
}
ノート:
Wordpressで:
global $wpdb; $table_name=$wpdb->prefix.'posts';
foreach ( $wpdb->get_col( "DESC " . $table_name, 0 ) as $column_name ) {
var_dump( $column_name );
}
phpを使っているのなら、Gistを使ってください。
結果が表示されない選択フィールドの全情報と、次のようなすべてのカスタムフィールドを取得できます。
SELECT a.name aname, b.name bname, b.*
FROM table1 a LEFT JOIN table2 b
ON a.id = b.pid;
上記のSQLがデータを返さない場合は、フィールド名aname、bname、bの他のフィールド名も取得します。
たった2行
$query_info = mysqli_query($link, $data_source);
$fetch_fields_result = $query_info->fetch_fields();
すべての回答からの最も簡単な解決策:
DESC `table name`
または
DESCRIBE `table name`
または
SHOW COLUMNS FROM `table name`
この質問は古くなっていますが、ここでは特定のクエリのフィールド名を動的に検索する方法を探しています(必ずしもテーブルのフィールドだけではありません)。そして、他の関連する質問では、与えられたタスクに対する答えとしてこれを指摘し続けているので、Gavin Simpsonのヒントを使用して、私がそれを実行できることがわかった方法を共有します。
//Function to generate a HTML table from a SQL query
function myTable($obConn,$sql)
{
$rsResult = mysqli_query($obConn, $sql) or die(mysqli_error($obConn));
if(mysqli_num_rows($rsResult)>0)
{
//We start with header. >>>Here we retrieve the field names<<<
echo "<table width=\"100%\" border=\"0\" cellspacing=\"2\" cellpadding=\"0\"><tr align=\"center\" bgcolor=\"#CCCCCC\">";
$i = 0;
while ($i < mysqli_num_fields($rsResult)){
$field = mysqli_fetch_field_direct($rsResult, $i);
$fieldName=$field->name;
echo "<td><strong>$fieldName</strong></td>";
$i = $i + 1;
}
echo "</tr>";
//>>>Field names retrieved<<<
//We dump info
$bolWhite=true;
while ($row = mysqli_fetch_assoc($rsResult)) {
echo $bolWhite ? "<tr bgcolor=\"#CCCCCC\">" : "<tr bgcolor=\"#FFF\">";
$bolWhite=!$bolWhite;
foreach($row as $data) {
echo "<td>$data</td>";
}
echo "</tr>";
}
echo "</table>";
}
}
これは、フィールド名を配列に挿入するように簡単に変更できます。
単純な:$sql="SELECT * FROM myTable LIMIT 1"
を使用すると、必要に応じて(データダンプ部分を削除して)SHOW COLUMNS
や追加のphpモジュールを使用する必要なく、任意のテーブルのフィールドを取得できます。
うまくいけば、これは他の誰かに役立ちます。
このクエリは、テーブル名を指定しなくても、データベース内のすべてのカラムのリストを取得します。列名のみのリストを返します。
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'db_name'
しかし、phpmyadminでこのクエリを実行すると、一連のエラーが表示されました。それにもかかわらず、それはうまくいった。注意して使用してください。
フィールド名と型だけが必要な場合(おそらくExcelへのコピー&ペーストが簡単になるように):
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='databasenamegoeshere'
AND DATA_TYPE='decimal' and TABLE_NAME = 'tablenamegoeshere'
削除する
DATA_TYPE='decimal'
すべてのデータ型が必要な場合
私は専門家ではありませんが、これは私のために働きます..
$sql = "desc MyTable";
$result = @mysql_query($sql);
while($row = @mysql_fetch_array($result)){
echo $row[0]."<br>"; // returns the first column of array. in this case Field
// the below code will return a full array-> Field,Type,Null,Key,Default,Extra
// for ($c=0;$c<sizeof($row);$c++){echo @$row[$c]."<br>";}
}