Antworten:
Am besten verwenden Sie die virtuelle Metadaten-Datenbank INFORMATION_SCHEMA . Insbesondere die Tabelle INFORMATION_SCHEMA.COLUMNS ...
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
Es ist SEHR leistungsfähig und kann Ihnen Tonnen von Informationen liefern, ohne Text analysieren zu müssen (z. B. Spaltentyp, ob die Spalte nullwertfähig ist, maximale Spaltengröße, Zeichensatz usw.) ...
Oh, und es ist Standard-SQL (während SHOW ...
es sich um eine MySQL-spezifische Erweiterung handelt) ...
Weitere Informationen über den Unterschied zwischen SHOW...
und die Verwendung von INFORMATION_SCHEMA
Tabellen, überprüfen Sie die MySQL - out - Dokumentation auf INFORMATION_SCHEMA
allgemein ...
SET @@SESSION.sql_mode = 'ANSI_QUOTES';
vorher haben können, aber das gefällt mir wirklich nicht. Und ich habe kein Problem mit den Back-Ticks für die Abgrenzung der Bezeichner. Tatsächlich mag ich sie besser als doppelte Anführungszeichen (doppelte Anführungszeichen lassen die Abfrage für mich falsch erscheinen) ... Für jeden seine eigenen ...
Sie können die folgende Abfrage für MYSQL verwenden:
SHOW columns FROM your-table;
Unten finden Sie den Beispielcode, der zeigt, wie die obige Syntax in PHP implementiert wird, um die Namen der Spalten aufzulisten:
$sql = "SHOW COLUMNS FROM your-table";
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result)){
echo $row['Field']."<br>";
}
Einzelheiten zur Ausgabe des SHOW COLUMNS FROM TABLE
Besuchs finden Sie unter: MySQL Refrence.
DESC TableName;
;-)
Es scheint zwei Möglichkeiten zu geben:
DESCRIBE `tablename`
oder
SHOW COLUMNS FROM `tablename`
Mehr dazu DESCRIBE
hier: http://dev.mysql.com/doc/refman/5.0/en/describe.html
DESCRIBE
ist nur eine Abkürzung für SHOW COLUMNS FROM
.
DESC
ist noch kürzer für DESCRIBE
!
Edit : Heute habe ich gelernt, wie man das besser macht. Bitte lesen Sie die Antwort von ircmaxell.
Analysieren Sie die Ausgabe von SHOW COLUMNS FROM table;
Hier erfahren Sie mehr darüber: http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
Verwenden Sie mysql_fetch_field()
diese Option , um alle Spaltendaten anzuzeigen. Siehe Handbuch .
$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;
}
"Warnung Diese Erweiterung ist ab PHP 5.5.0 veraltet und wird in Zukunft entfernt."
mysqli_num_fields()
und mysqli_fetch_field_direct()
sind die aktualisierten Methoden
Eine alte PHP-Funktion "mysql_list_fields ()" ist veraltet. Der beste Weg, um Namen von Feldern zu erhalten, ist heute die Abfrage "SHOW COLUMNS FROM table_name [LIKE 'name']". Hier ist ein kleines Beispiel:
$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();
Ich bin mir nicht sicher, ob Sie danach gesucht haben, aber das hat bei mir funktioniert:
$query = query("DESC YourTable");
$col_names = array_column($query, 'Field');
Das gibt ein einfaches Array der Spaltennamen / Variablennamen in Ihrer Tabelle oder Ihrem Array als Zeichenfolgen zurück, was ich brauchte, um MySQL-Abfragen dynamisch zu erstellen. Meine Frustration war, dass ich einfach nicht sehr gut weiß, wie man Arrays in PHP indiziert, also war ich mir nicht sicher, was ich mit den Ergebnissen von DESC oder SHOW anfangen sollte. Hoffe meine Antwort ist hilfreich für Anfänger wie mich!
So überprüfen Sie das Ergebnis: print_r($col_names);
Wenn Sie Ihre gesamte Tabellenstruktur mit einigen Dateien überprüfen möchten, verwenden Sie diesen Code. In dieser Abfrage wähle ich Spaltenname, Spaltentyp und Tabellenname für weitere Details. Ich verwende order by column_type, damit ich es leicht sehen kann.
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' order by DATA_TYPE;
Wenn Sie nur doppelt typisierte Dateien überprüfen möchten, können Sie dies problemlos tun
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;
Wenn Sie überprüfen möchten, in welchem Feld der Nulltyp usw. zulässig ist, können Sie dies verwenden
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;
Sie möchten mehr überprüfen, als dieser Link Ihnen auch hilft.
SHOW COLUMNS in MySQL 5.1 (nicht 5.5) verwendet eine temporäre Festplattentabelle.
Daher kann es in einigen Fällen als langsam angesehen werden. Zumindest kann es Ihren Wert für created_tmp_disk_tables erhöhen . Stellen Sie sich eine temporäre Festplattentabelle pro Verbindung oder pro Seitenanforderung vor.
SPALTEN ANZEIGEN ist nicht wirklich so langsam, möglicherweise weil es den Dateisystem-Cache verwendet. Phpmyadmin sagt konsequent ~ 0,5ms. Dies ist nichts im Vergleich zu 500 ms bis 1000 ms beim Bereitstellen einer WordPress-Seite. Trotzdem gibt es Zeiten, in denen es darauf ankommt. Es liegt eine Beteiligung des Festplattensystems vor. Sie wissen nie, was passiert, wenn der Server ausgelastet ist, der Cache voll ist, die Festplatte blockiert ist usw.
Das Abrufen von Spaltennamen über SELECT * FROM ... LIMIT 1 betrug ca. 0,1 ms und kann auch den Abfragecache verwenden.
Hier ist mein kleiner optimierter Code, um Spaltennamen aus einer Tabelle abzurufen, ohne wenn möglich show-Spalten zu verwenden:
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;
}
Anmerkungen:
Probieren Sie dieses aus, ich persönlich benutze es:
SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name'
Diese Frage ist alt, aber ich habe hier nach einer Möglichkeit gesucht, eine bestimmte Abfrage auf dynamische Weise zu finden (nicht unbedingt nur die Felder einer Tabelle). Und da die Leute dies in anderen verwandten Fragen immer wieder als Antwort auf diese bestimmte Aufgabe angeben, teile ich anhand der Tipps von Gavin Simpson die Art und Weise, wie ich festgestellt habe, dass dies möglich ist:
//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>";
}
}
Dies kann leicht modifiziert werden, um die Feldnamen in ein Array einzufügen.
Verwenden eines einfachen: $sql="SELECT * FROM myTable LIMIT 1"
Kann Ihnen die Felder einer beliebigen Tabelle geben, ohne dass Sie SHOW COLUMNS
ein zusätzliches PHP-Modul verwenden müssen, falls erforderlich (Entfernen des Daten-Dump-Teils).
Hoffentlich hilft das jemand anderem.
Wenn Sie PHP verwenden, verwenden Sie dieses Wesentliche .
Es kann ausgewählte Felder mit vollständigen Informationen ohne Ergebnis erhalten , und alle benutzerdefinierten Felder wie:
SELECT a.name aname, b.name bname, b.*
FROM table1 a LEFT JOIN table2 b
ON a.id = b.pid;
Wenn über SQL keine Daten zurückgegeben werden, werden auch die Feldnamen aname, bname und der andere Feldname von b angezeigt
nur zwei Zeilen:
$query_info = mysqli_query($link, $data_source);
$fetch_fields_result = $query_info->fetch_fields();
Diese Abfrage ruft eine Liste aller Spalten in einer Datenbank ab, ohne dass ein Tabellenname angegeben werden muss. Es wird nur eine Liste mit Spaltennamen zurückgegeben:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'db_name'
Als ich diese Abfrage in phpmyadmin ausführte, wurden jedoch eine Reihe von Fehlern angezeigt. Trotzdem hat es funktioniert. Verwenden Sie es daher mit Vorsicht.
Die einfachste Lösung aller Antworten:
DESC `table name`
oder
DESCRIBE `table name`
oder
SHOW COLUMNS FROM `table name`
Wenn Sie nur die Feldnamen und -typen benötigen (möglicherweise zum einfachen Einfügen in Excel):
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='databasenamegoeshere'
AND DATA_TYPE='decimal' and TABLE_NAME = 'tablenamegoeshere'
entfernen
DATA_TYPE='decimal'
wenn Sie alle Datentypen wollen
Ich bin kein Experte, aber das funktioniert bei mir ..
$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>";}
}
Ich habe diese Abfrage in SQL Server ausprobiert und dies hat bei mir funktioniert:
SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')