Jawaban:
Cara terbaik adalah dengan menggunakan database virtual metadata INFORMATION_SCHEMA . Khususnya tabel INFORMATION_SCHEMA.COLUMNS ...
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
Ini SANGAT kuat, dan dapat memberi Anda BANYAK informasi tanpa perlu mem-parsing teks (Seperti jenis kolom, apakah kolom tersebut dapat dibatalkan, ukuran kolom maks, set karakter, dll) ...
Oh, dan itu SQL standar (Padahal SHOW ...
ekstensi khusus MySQL) ...
Untuk informasi lebih lanjut tentang perbedaan antara SHOW...
dan menggunakan INFORMATION_SCHEMA
tabel, lihat DokumentasiINFORMATION_SCHEMA
MySQL secara umum ...
SET @@SESSION.sql_mode = 'ANSI_QUOTES';
sebelum tangan juga, tetapi saya benar-benar tidak suka itu. Dan saya tidak punya masalah dengan tanda centang kembali untuk penetapan batas pengenal. Bahkan, saya suka mereka lebih baik daripada tanda kutip ganda (tanda kutip ganda membuat kueri terasa salah bagi saya) ... Untuk masing-masing sendiri ...
Anda dapat menggunakan permintaan berikut untuk MYSQL:
SHOW columns FROM your-table;
Di bawah ini adalah contoh kode yang menunjukkan Bagaimana menerapkan sintaksis di atas di php untuk mendaftar nama-nama kolom:
$sql = "SHOW COLUMNS FROM your-table";
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result)){
echo $row['Field']."<br>";
}
Untuk Perincian tentang keluaran SHOW COLUMNS FROM TABLE
kunjungan: MySQL Refrence.
DESC TableName;
;-)
Sepertinya ada 2 cara:
DESCRIBE `tablename`
atau
SHOW COLUMNS FROM `tablename`
Lebih lanjut di DESCRIBE
sini: http://dev.mysql.com/doc/refman/5.0/id/describe.html
DESCRIBE
hanya jalan pintas untuk SHOW COLUMNS FROM
.
DESC
bahkan lebih pendek DESCRIBE
!
Sunting : Hari ini saya belajar cara yang lebih baik untuk melakukan ini. Silakan lihat jawaban ircmaxell.
Parsing output dari SHOW COLUMNS FROM table;
Berikut ini lebih lanjut tentang hal ini di sini: http://dev.mysql.com/doc/refman/5.0/id/show-columns.html
Gunakan mysql_fetch_field()
untuk melihat semua data kolom. Lihat 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;
}
"Peringatan, ekstensi ini sudah tidak digunakan lagi pada PHP 5.5.0, dan akan dihapus di masa mendatang."
mysqli_num_fields()
dan mysqli_fetch_field_direct()
merupakan metode yang diperbarui
Fungsi PHP lama "mysql_list_fields ()" sudah usang. Jadi, hari ini cara terbaik untuk mendapatkan nama bidang adalah kueri "SHOW COLUMNS FROM table_name [LIKE 'name']". Jadi, inilah sedikit contohnya:
$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; }
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();
Tidak yakin apakah ini yang Anda cari, tetapi ini berhasil untuk saya:
$query = query("DESC YourTable");
$col_names = array_column($query, 'Field');
Itu mengembalikan array sederhana dari nama kolom / nama variabel di tabel atau array Anda sebagai string, yang adalah apa yang saya butuhkan untuk membangun query MySQL secara dinamis. Rasa frustrasi saya adalah saya tidak tahu bagaimana cara mengindeks array di PHP dengan sangat baik, jadi saya tidak yakin apa yang harus dilakukan dengan hasil dari DESC atau SHOW. Semoga jawaban saya bermanfaat bagi pemula seperti saya!
Untuk memeriksa hasil: print_r($col_names);
ketika Anda ingin memeriksa struktur semua tabel Anda dengan beberapa yang diajukan kemudian gunakan kode ini. Dalam kueri ini saya memilih nama_kolom, nama_kolom dan nama_kolom untuk rincian lebih lanjut. Saya menggunakan order by column_type sehingga saya bisa melihatnya dengan mudah.
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' order by DATA_TYPE;
Jika Anda ingin memeriksa hanya tipe ganda yang diajukan maka Anda dapat melakukannya dengan mudah
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;
jika Anda ingin memeriksa bidang mana yang memungkinkan jenis null dll, maka Anda dapat menggunakan ini
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;
Anda ingin memeriksa lebih dari tautan ini juga membantu Anda.
TAMPILKAN KOLOM di mysql 5.1 (bukan 5.5) menggunakan tabel disk sementara.
Jadi bisa dianggap lambat untuk beberapa kasus. Setidaknya, itu dapat meningkatkan nilai Created_tmp_disk_tables Anda . Bayangkan satu tabel disk sementara untuk setiap koneksi atau setiap permintaan halaman.
SHOW COLUMNS tidak terlalu lambat, mungkin karena menggunakan cache sistem file. Phpmyadmin berkata ~ 0.5ms secara konsisten. Ini tidak seberapa dibandingkan dengan 500ms-1000ms melayani halaman wordpress. Tapi tetap saja, ada saatnya itu penting. Ada keterlibatan sistem disk, Anda tidak pernah tahu apa yang terjadi ketika server sibuk, cache penuh, hdd macet dll.
Mengambil nama kolom melalui SELECT * FROM ... LIMIT 1 adalah sekitar ~ 0,1 ms, dan dapat menggunakan cache kueri juga.
Jadi di sini adalah kode kecil saya yang dioptimalkan untuk mendapatkan nama kolom dari sebuah tabel, tanpa menggunakan kolom acara jika mungkin:
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;
}
Catatan:
Coba yang ini saya pribadi menggunakannya:
SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name'
Pertanyaan ini sudah tua, tetapi saya sampai di sini mencari cara untuk menemukan kueri yang diberikan nama bidangnya secara dinamis (tidak harus hanya bidang tabel). Dan karena orang terus menunjuk ini sebagai jawaban untuk tugas yang diberikan itu dalam pertanyaan terkait lainnya, saya membagikan cara saya menemukannya dapat dilakukan, menggunakan kiat 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>";
}
}
Ini dapat dengan mudah diubah untuk memasukkan nama bidang dalam array.
Menggunakan sederhana: $sql="SELECT * FROM myTable LIMIT 1"
dapat memberi Anda bidang tabel apa pun, tanpa perlu menggunakan SHOW COLUMNS
atau modul php tambahan, jika diperlukan (menghapus bagian dump data).
Semoga ini bisa membantu orang lain.
jika Anda menggunakan php, gunakan intisari ini .
itu bisa mendapatkan pilih bidang info lengkap tanpa hasil, dan semua bidang khusus seperti:
SELECT a.name aname, b.name bname, b.*
FROM table1 a LEFT JOIN table2 b
ON a.id = b.pid;
jika sql di atas tidak mengembalikan data, juga akan mendapatkan nama bidang aname, bname, nama bidang b lainnya
hanya dua baris:
$query_info = mysqli_query($link, $data_source);
$fetch_fields_result = $query_info->fetch_fields();
Kueri ini mengambil daftar semua kolom dalam database tanpa harus menentukan nama tabel. Ini mengembalikan daftar nama kolom saja:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'db_name'
Namun, ketika saya menjalankan kueri ini di phpmyadmin, ia menampilkan serangkaian kesalahan. Meskipun demikian, itu berhasil. Jadi gunakan dengan hati-hati.
Solusi paling sederhana dari semua Jawaban:
DESC `table name`
atau
DESCRIBE `table name`
atau
SHOW COLUMNS FROM `table name`
jika Anda hanya perlu nama dan tipe bidang (mungkin agar mudah menyalin-paste ke Excel):
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='databasenamegoeshere'
AND DATA_TYPE='decimal' and TABLE_NAME = 'tablenamegoeshere'
menghapus
DATA_TYPE='decimal'
jika Anda ingin semua tipe data
saya bukan ahli, tetapi ini bekerja untuk saya ..
$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>";}
}
Saya telah mencoba kueri ini di SQL Server dan ini berhasil untuk saya:
SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')