Risposte:
Il modo migliore è utilizzare il database virtuale dei metadati INFORMATION_SCHEMA . In particolare la tabella INFORMATION_SCHEMA.COLUMNS ...
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
È MOLTO potente e può darti tonnellate di informazioni senza bisogno di analizzare il testo (come il tipo di colonna, se la colonna è nullable, dimensione massima della colonna, set di caratteri, ecc.) ...
Oh, ed è SQL standard (considerando che SHOW ...
è un'estensione specifica di MySQL) ...
Per ulteriori informazioni sulla differenza tra SHOW...
e l'utilizzo delle INFORMATION_SCHEMA
tabelle, consultare la documentazioneINFORMATION_SCHEMA
MySQL su in generale ...
SET @@SESSION.sql_mode = 'ANSI_QUOTES';
prima mano, ma davvero non mi piace. E non ho alcun problema con i back-tick per la delimitazione dell'identificatore. In effetti, mi piacciono meglio delle doppie virgolette (le doppie virgolette mi fanno sentire la domanda sbagliata) ... A ciascuno il suo ...
È possibile utilizzare la seguente query per MYSQL:
SHOW columns FROM your-table;
Di seguito è riportato il codice di esempio che mostra come implementare la sintassi sopra in php per elencare i nomi delle colonne:
$sql = "SHOW COLUMNS FROM your-table";
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result)){
echo $row['Field']."<br>";
}
Per i dettagli sull'output della SHOW COLUMNS FROM TABLE
visita: MySQL Refrence.
DESC TableName;
;-)
Sembra che ci siano 2 modi:
DESCRIBE `tablename`
o
SHOW COLUMNS FROM `tablename`
Maggiori informazioni DESCRIBE
qui: http://dev.mysql.com/doc/refman/5.0/en/describe.html
DESCRIBE
è solo una scorciatoia per SHOW COLUMNS FROM
.
DESC
è ancora più breve per DESCRIBE
!
Modifica : oggi ho imparato il modo migliore per farlo. Si prega di consultare la risposta di ircmaxell.
Analizzare l'output di SHOW COLUMNS FROM table;
Ecco di più qui: http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
Utilizzare mysql_fetch_field()
per visualizzare tutti i dati di colonna. Vedi il manuale .
$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;
}
"Avviso Questa estensione è obsoleta a partire da PHP 5.5.0 e verrà rimossa in futuro."
mysqli_num_fields()
e mysqli_fetch_field_direct()
sono i metodi aggiornati
Una vecchia funzione PHP "mysql_list_fields ()" è obsoleta. Quindi, oggi il modo migliore per ottenere i nomi dei campi è una query "MOSTRA COLONNE DA table_name [LIKE 'name']". Quindi, ecco un piccolo esempio:
$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();
Non sono sicuro se questo è quello che stavi cercando, ma ha funzionato per me:
$query = query("DESC YourTable");
$col_names = array_column($query, 'Field');
Ciò restituisce un semplice array di nomi di colonne / nomi di variabili nella tabella o nell'array come stringhe, che è ciò di cui avevo bisogno per creare dinamicamente query MySQL. La mia frustrazione era che semplicemente non sapevo indicizzare molto bene gli array in PHP, quindi non ero sicuro di cosa fare con i risultati di DESC o SHOW. Spero che la mia risposta sia utile per i principianti come me!
Per verificare il risultato: print_r($col_names);
quando si desidera controllare la struttura di tutta la tabella con alcuni archiviati, utilizzare questo codice. In questa query seleziono nome_colonna, tipo_colonna e nome_tabella per maggiori dettagli. Uso order by column_type in modo da poterlo vedere facilmente.
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' order by DATA_TYPE;
Se vuoi controllare solo il doppio tipo archiviato, puoi farlo facilmente
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;
se si desidera verificare quale campo consente il tipo null ecc., è possibile utilizzare questo
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;
vuoi controllare più quindi anche il link thik ti aiuta.
SHOW COLUMNS in mysql 5.1 (non 5.5) utilizza una tabella di dischi temporanea.
Quindi può essere considerato lento in alcuni casi. Almeno, può aumentare il valore del valore Created_tmp_disk_tables . Immagina una tabella di dischi temporanea per connessione o per ogni richiesta di pagina.
SHOW COLUMNS non è poi così lento, forse perché utilizza la cache del file system. Phpmyadmin dice ~ 0,5 ms in modo coerente. Questo non è nulla in confronto ai 500ms-1000ms di servire una pagina wordpress. Tuttavia, ci sono volte che contano. C'è un coinvolgimento del sistema del disco, non si sa mai cosa succede quando il server è occupato, la cache è piena, l'hdd è bloccato ecc.
Il recupero dei nomi delle colonne tramite SELECT * FROM ... LIMIT 1 era di circa 0,1 ms e può utilizzare anche la cache delle query.
Quindi ecco il mio piccolo codice ottimizzato per ottenere i nomi delle colonne da una tabella, senza usare show colonne se possibile:
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;
}
Appunti:
Prova questo io personalmente lo uso:
SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name'
Questa domanda è vecchia, ma sono arrivato qui alla ricerca di un modo per trovare una determinata query i nomi dei suoi campi in modo dinamico (non necessariamente solo i campi di una tabella). E poiché le persone continuano a indicare questa come la risposta per quel determinato compito in altre domande correlate, sto condividendo il modo in cui ho scoperto che può essere fatto, usando i suggerimenti di 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>";
}
}
Questo può essere facilmente modificato per inserire i nomi dei campi in un array.
Utilizzando un semplice: $sql="SELECT * FROM myTable LIMIT 1"
può darti i campi di qualsiasi tabella, senza la necessità di utilizzare SHOW COLUMNS
o alcun modulo php aggiuntivo, se necessario (rimuovendo la parte di dump dei dati).
Spero che questo aiuti qualcun altro.
se usi php, usa questa sintesi .
può ottenere informazioni complete sui campi selezionati senza risultato , e tutti i campi personalizzati come:
SELECT a.name aname, b.name bname, b.*
FROM table1 a LEFT JOIN table2 b
ON a.id = b.pid;
se sopra sql non restituisce dati, otterrà anche i nomi dei campi aname, bname, l'altro nome del campo b
solo due righe:
$query_info = mysqli_query($link, $data_source);
$fetch_fields_result = $query_info->fetch_fields();
Questa query recupera un elenco di tutte le colonne in un database senza dover specificare un nome di tabella. Restituisce un elenco di soli nomi di colonna:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'db_name'
Tuttavia, quando ho eseguito questa query in phpmyadmin, ha visualizzato una serie di errori. Tuttavia, ha funzionato. Quindi usalo con cautela.
La soluzione più semplice tra tutte le risposte:
DESC `table name`
o
DESCRIBE `table name`
o
SHOW COLUMNS FROM `table name`
se hai bisogno solo dei nomi e dei tipi di campo (forse per un facile copia-incolla in Excel):
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='databasenamegoeshere'
AND DATA_TYPE='decimal' and TABLE_NAME = 'tablenamegoeshere'
rimuovere
DATA_TYPE='decimal'
se vuoi tutti i tipi di dati
non sono un esperto, ma questo funziona per me ..
$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>";}
}
Ho provato questa query in SQL Server e questo ha funzionato per me:
SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')