Yanıtlar:
En iyi yol BİLGİ_SCHEMA meta veri sanal veritabanını kullanmaktır. Özellikle BİLGİ_SCHEMA.COLUMNS tablosu ...
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
ÇOK güçlüdür ve metni ayrıştırmanıza gerek kalmadan size tonlarca bilgi verebilir (Sütun türü, sütunun boş olup olmadığı, maksimum sütun boyutu, karakter seti vb.) ...
Oh, ve standart SQL ( SHOW ...
MySQL'e özgü bir uzantı olmasına rağmen ) ...
Tablolar arasındaki SHOW...
ve INFORMATION_SCHEMA
tabloların kullanımı hakkında daha fazla bilgi için genel olarak MySQL Belgelerine bakınINFORMATION_SCHEMA
...
SET @@SESSION.sql_mode = 'ANSI_QUOTES';
, ama gerçekten bundan hoşlanmıyorum. Ve tanımlayıcı sınırlaması için geri keneler ile ilgili bir sorunum yok. Aslında, onları çift tırnak daha iyi gibi (çift tırnak sorgu bana yanlış hissettiriyor) ... Her biri kendi ...
MYSQL için aşağıdaki sorguyu kullanabilirsiniz:
SHOW columns FROM your-table;
Aşağıda, sütunların adlarını listelemek için php'de yukarıdaki sözdiziminin nasıl uygulanacağını gösteren örnek kod verilmiştir:
$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
Ziyaret çıktısıyla ilgili ayrıntılar için : MySQL Refrence.
DESC TableName;
;-)
2 yol var gibi görünüyor:
DESCRIBE `tablename`
veya
SHOW COLUMNS FROM `tablename`
DESCRIBE
Burada daha fazlası : http://dev.mysql.com/doc/refman/5.0/en/describe.html
DESCRIBE
sadece bir kısayoldur SHOW COLUMNS FROM
.
DESC
daha da kısadır DESCRIBE
!
Edit : Bugün bunu yapmanın daha iyi bir yol öğrendim. Lütfen ircmaxell'in cevabına bakınız.
Çıktısını ayrıştır SHOW COLUMNS FROM table;
İşte burada daha fazlası: http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
mysql_fetch_field()
Tüm sütun verilerini görüntülemek için kullanın . El kitabına bakın .
$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;
}
"Uyarı Bu uzantı PHP 5.5.0'dan itibaren kullanımdan kaldırılmıştır ve gelecekte kaldırılacaktır."
mysqli_num_fields()
ve mysqli_fetch_field_direct()
güncellenmiş yöntemler
Eski bir PHP işlevi "mysql_list_fields ()" kullanımdan kaldırılmıştır. Bu nedenle, bugün alan adlarını almanın en iyi yolu "table_name [LIKE 'name'] dan COLUMNS GÖSTER" sorgusudur. İşte size küçük bir örnek:
$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();
Aradığın şey olduğundan emin değilim, ama bu benim için çalıştı:
$query = query("DESC YourTable");
$col_names = array_column($query, 'Field');
Bu, tablonuzdaki veya dizinizdeki sütun adlarının / değişken adlarının basit bir dizisini dizeler olarak döndürür, bu da MySQL sorgularını dinamik olarak oluşturmak için gerekli olan şeydir. Benim hayal kırıklığı ben sadece PHP dizileri çok iyi endeksleme bilmiyorum oldu, bu yüzden DESC veya SHOW sonuçları ile ne yapacağından emin değildi. Umarım cevabım kendim gibi yeni başlayanlar için faydalıdır!
Sonucu kontrol etmek için: print_r($col_names);
tüm tablo yapınızı bazı dosyalarla kontrol etmek istediğinizde bu kodu kullanın. Bu sorguda daha fazla ayrıntı için column_name, column_type ve table_name öğelerini seçiyorum. Ben kolayca görebilmeniz için column_type tarafından sipariş kullanın.
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' order by DATA_TYPE;
Eğer sadece çift tip eğe kontrol etmek istiyorsanız o zaman kolayca yapabilirsiniz
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;
hangi alanın null türüne izin verdiğini vb. kontrol etmek istiyorsanız bunu kullanabilirsiniz
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;
daha sonra kontrol etmek istiyorum thik bağlantı da size yardımcı olur.
Mysql 5.1'deki (5.5 değil) COLUMNS GÖSTER geçici bir disk tablosu kullanır.
Bu nedenle bazı durumlar için yavaş kabul edilebilir. En azından created_tmp_disk_tables değerinizi yükseltebilir . Her bağlantı veya her sayfa isteği için bir geçici disk tablosu düşünün.
SHOW COLUMNS , muhtemelen dosya sistemi önbelleği kullandığından çok yavaş değildir. Phpmyadmin sürekli ~ 0.5 ms diyor. Bu, bir wordpress sayfası sunmanın 500ms-1000ms ile karşılaştırıldığında hiçbir şey değildir. Ama yine de önemli zamanlar var. Bir disk sistemi katılımı vardır, sunucu meşgul olduğunda, önbellek dolu olduğunda, hdd durduğunda vb.
SELECT * FROM ... LIMIT 1 aracılığıyla sütun adları alınıyor ~ 0.1ms civarındaydı ve sorgu önbelleğini de kullanabilir.
Mümkünse , gösterme sütunlarını kullanmadan bir tablodan sütun adları almak için küçük optimize edilmiş kodum :
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;
}
Notlar:
Ben şahsen kullanmak bunu bir deneyin:
SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name'
Bu soru eski, ama burada alan adını dinamik bir şekilde (mutlaka bir tablonun alanları değil) belirli bir sorgu bulmak için bir yol arıyorum var. Ve insanlar bunu diğer ilgili sorularda verilen görevin cevabı olarak göstermeye devam ettiğinden, Gavin Simpson'un ipuçlarını kullanarak yapılabileceğini bulduğum yolu paylaşıyorum:
//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>";
}
}
Bu, alan adlarını bir diziye eklemek için kolayca değiştirilebilir.
Basit bir: $sql="SELECT * FROM myTable LIMIT 1"
kullanarak, herhangi bir tablonun alanlarını, kullanmanıza gerek kalmadan SHOW COLUMNS
veya herhangi bir ekstra php modülünü (gerekirse veri dökümü bölümünü kaldırarak) verebilirsiniz .
Umarım bu başka birine yardımcı olur.
Eğer php kullanıyorsanız, bu özü kullanın .
sonuç select ile seçim alanları tam bilgi ve gibi tüm özel alanlar alabilirsiniz:
SELECT a.name aname, b.name bname, b.*
FROM table1 a LEFT JOIN table2 b
ON a.id = b.pid;
sql üzerinde veri döndürmezseniz, alan adları aname, bname, b'nin diğer alan adını da alır
sadece iki satır:
$query_info = mysqli_query($link, $data_source);
$fetch_fields_result = $query_info->fetch_fields();
Bu sorgu, tablo adı belirtmek zorunda kalmadan veritabanındaki tüm sütunların listesini getirir. Yalnızca sütun adlarının bir listesini döndürür:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'db_name'
Ancak, phpmyadmin bu sorguyu çalıştırdığımda, bir dizi hata görüntüledi. Yine de işe yaradı. Bu yüzden dikkatli kullanın.
Tüm Yanıtların en basit çözümü:
DESC `table name`
veya
DESCRIBE `table name`
veya
SHOW COLUMNS FROM `table name`
yalnızca alan adlarına ve türlerine ihtiyacınız varsa (belki de Excel'e kolay kopyalamak için):
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='databasenamegoeshere'
AND DATA_TYPE='decimal' and TABLE_NAME = 'tablenamegoeshere'
Kaldırmak
DATA_TYPE='decimal'
tüm veri türlerini istiyorsanız
uzman değilim, ama bu benim için çalışıyor ..
$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>";}
}
SQL Server'da bu sorguyu denedim ve bu benim için çalıştı:
SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')