Odpowiedzi:
Najlepszym sposobem jest użycie wirtualnej bazy danych metadanych INFORMACJE_SCHEMA . W szczególności tabela INFORMACJE_SCHEMA.COLUMNS ...
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
Jest BARDZO potężny i może dostarczyć TONI informacji bez konieczności analizowania tekstu (np. Typ kolumny, czy kolumna ma wartość zerową, maksymalny rozmiar kolumny, zestaw znaków itp.) ...
Aha, i to jest standardowy SQL (podczas gdy SHOW ...
jest to rozszerzenie specyficzne dla MySQL) ...
Aby uzyskać więcej informacji na temat różnicy między tabelami SHOW...
i korzystania z nich INFORMATION_SCHEMA
, zapoznaj się ogólnie z dokumentacjąINFORMATION_SCHEMA
MySQL ...
SET @@SESSION.sql_mode = 'ANSI_QUOTES';
przed ręką, ale tak naprawdę to nie lubię. I nie mam problemu z tyknięciami wstecznymi dla delimitacji identyfikatora. W rzeczywistości lubię je bardziej niż podwójne cudzysłowy (podwójne cudzysłowy sprawiają, że zapytanie wydaje mi się złe) ... Do każdego z nich ...
Możesz użyć następującego zapytania dla MYSQL:
SHOW columns FROM your-table;
Poniżej znajduje się przykładowy kod, który pokazuje jak zaimplementować powyższą składnię w php, aby wyświetlić nazwy kolumn:
$sql = "SHOW COLUMNS FROM your-table";
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result)){
echo $row['Field']."<br>";
}
Szczegółowe informacje na temat wyników SHOW COLUMNS FROM TABLE
wizyty: MySQL Refrence.
DESC TableName;
;-)
Wydaje się, że istnieją 2 sposoby:
DESCRIBE `tablename`
lub
SHOW COLUMNS FROM `tablename`
Więcej DESCRIBE
tutaj: http://dev.mysql.com/doc/refman/5.0/en/describe.html
DESCRIBE
to tylko skrót do SHOW COLUMNS FROM
.
DESC
jest nawet krótszy dla DESCRIBE
!
Edycja : Dzisiaj nauczyłem się lepszego sposobu robienia tego. Zobacz odpowiedź ircmaxell.
Analizuj dane wyjściowe z SHOW COLUMNS FROM table;
Oto więcej na ten temat tutaj: http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
Służy mysql_fetch_field()
do wyświetlania wszystkich danych kolumn. Zobacz instrukcję .
$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;
}
„Ostrzeżenie To rozszerzenie jest nieaktualne od PHP 5.5.0 i zostanie usunięte w przyszłości.”
mysqli_num_fields()
i mysqli_fetch_field_direct()
są zaktualizowane metody
Stara funkcja PHP „mysql_list_fields ()” jest przestarzała. Tak więc dzisiaj najlepszym sposobem na uzyskanie nazw pól jest zapytanie „POKAŻ KOLUMNY Z nazwy_tabeli [JAK” nazwa ”]”. Oto mały przykład:
$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();
Nie jestem pewien, czy tego właśnie szukałeś, ale działało to dla mnie:
$query = query("DESC YourTable");
$col_names = array_column($query, 'Field');
Zwraca prostą tablicę nazw kolumn / nazw zmiennych w tabeli lub tablicy jako ciągi, co jest tym, czego potrzebowałem, aby dynamicznie budować zapytania MySQL. Moją frustracją było to, że po prostu nie wiem, jak bardzo dobrze indeksować tablice w PHP, więc nie byłem pewien, co zrobić z wynikami DESC lub SHOW. Mam nadzieję, że moja odpowiedź jest pomocna dla początkujących takich jak ja!
Aby sprawdzić wynik: print_r($col_names);
jeśli chcesz sprawdzić całą strukturę tabeli z niektórymi plikami, użyj tego kodu. W tym zapytaniu wybieram nazwę kolumny, typ kolumny i nazwę tabeli, aby uzyskać więcej informacji. Korzystam z sortowania według typu kolumny, więc mogę to łatwo zobaczyć.
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' order by DATA_TYPE;
Jeśli chcesz sprawdzić tylko dwa typy plików, możesz to zrobić z łatwością
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;
jeśli chcesz sprawdzić, które pole zezwala na typ zerowy itp., możesz użyć tego
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;
chcesz sprawdzić więcej niż link, który Ci również pomoże.
POKAŻ KOLUMNY w mysql 5.1 (nie 5.5) używa tymczasowej tabeli dysków.
W niektórych przypadkach można to uznać za wolne. Przynajmniej może podbić swoją created_tmp_disk_tables wartość. Wyobraź sobie jedną tymczasową tabelę dyskową na połączenie lub na każde żądanie strony.
POKAŻ KOLUMNY nie jest tak powolne, prawdopodobnie dlatego, że używa pamięci podręcznej systemu plików. Phpmyadmin mówi ~ 0,5 ms konsekwentnie. To nic w porównaniu z 500ms-1000ms obsługi strony wordpress. Ale wciąż są chwile, które mają znaczenie. Zaangażowany jest system dyskowy, nigdy nie wiadomo, co się stanie, gdy serwer jest zajęty, pamięć podręczna jest pełna, dysk twardy jest zablokowany itp.
Pobieranie nazw kolumn za pomocą SELECT * FROM ... LIMIT 1 trwało około ~ 0,1 ms i może również używać pamięci podręcznej zapytań.
Oto mój mały zoptymalizowany kod do pobierania nazw kolumn z tabeli, bez używania kolumn show, jeśli to możliwe:
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;
}
Uwagi:
Wypróbuj ten, którego osobiście używam:
SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name'
To pytanie jest stare, ale znalazłem tutaj sposób na znalezienie danego zapytania w jego nazwach pól w sposób dynamiczny (niekoniecznie tylko pola tabeli). A ponieważ ludzie wciąż wskazują to jako odpowiedź na to zadanie w innych powiązanych pytaniach, dzielę się sposobem, w jaki według mnie można to zrobić, korzystając ze wskazówek Gavina Simpsona:
//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>";
}
}
Można to łatwo zmodyfikować, aby wstawić nazwy pól do tablicy.
Używając prostego: $sql="SELECT * FROM myTable LIMIT 1"
może dać ci pola dowolnej tabeli, bez potrzeby użycia SHOW COLUMNS
lub dodatkowego modułu php, jeśli to konieczne (usunięcie części zrzutu danych).
Mam nadzieję, że pomoże to komuś innemu.
jeśli używasz php, użyj tego sens .
może uzyskać pełne informacje o wybranych polach bez rezultatu oraz wszystkie pola niestandardowe, takie jak:
SELECT a.name aname, b.name bname, b.*
FROM table1 a LEFT JOIN table2 b
ON a.id = b.pid;
jeśli powyżej sql nie zwróci danych, otrzyma także nazwy pól aname, bname, b inne nazwy pól
tylko dwie linie:
$query_info = mysqli_query($link, $data_source);
$fetch_fields_result = $query_info->fetch_fields();
To zapytanie pobiera listę wszystkich kolumn w bazie danych bez konieczności określania nazwy tabeli. Zwraca listę tylko nazw kolumn:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'db_name'
Jednak gdy uruchomiłem to zapytanie w phpmyadmin, wyświetliło się szereg błędów. Niemniej jednak zadziałało. Dlatego używaj go ostrożnie.
Najprostsze rozwiązanie spośród wszystkich odpowiedzi:
DESC `table name`
lub
DESCRIBE `table name`
lub
SHOW COLUMNS FROM `table name`
jeśli potrzebujesz tylko nazw i typów pól (być może do łatwego wklejenia do Excela):
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='databasenamegoeshere'
AND DATA_TYPE='decimal' and TABLE_NAME = 'tablenamegoeshere'
usunąć
DATA_TYPE='decimal'
jeśli chcesz wszystkie typy danych
nie jestem ekspertem, ale to działa dla mnie ..
$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>";}
}
Próbowałem tego zapytania w SQL Server i to zadziałało dla mnie:
SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')