Zapytanie MySQL, aby uzyskać nazwy kolumn?

Chciałbym dostać wszystkie nazwy col tabeli mysql do tablicy w php?

Czy jest do tego jakieś zapytanie?

 221
Author: Haroldo, 2010-11-12

18 answers

Najlepszym sposobem jest użycie wirtualnej bazy metadanychINFORMATION_SCHEMA . W szczególności INFORMATION_SCHEMA.Kolumny tabela...

SELECT `COLUMN_NAME` 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='yourdatabasename' 
    AND `TABLE_NAME`='yourtablename';

Jest bardzo wydajny i może dostarczyć mnóstwo informacji bez potrzeby analizowania tekstu (np. typ kolumny, czy kolumna jest nullable, maksymalny rozmiar kolumny, zestaw znaków itp.)...

Oh, I jest to standardowy SQL (podczas gdy {[1] } jest rozszerzeniem specyficznym dla MySQL)...

Aby uzyskać więcej informacji na temat różnicy pomiędzy SHOW... i używając tabel INFORMATION_SCHEMA, sprawdź dokumentację MySQL na INFORMATION_SCHEMA ogólnie...

 414
Author: ircmaxell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-12 13:54:09

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ć listę nazw kolumn:

$sql = "SHOW COLUMNS FROM your-table";
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result)){
    echo $row['Field']."<br>";
}

Po szczegóły dotyczące wyjścia SHOW COLUMNS FROM TABLE odwiedź stronę: MySQL Refrence.

 162
Author: stillstanding,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-28 07:23:15

Wydaje się, że są 2 sposoby:

DESCRIBE `tablename`

Lub

SHOW COLUMNS FROM `tablename`

Więcej o DESCRIBE Tutaj: http://dev.mysql.com/doc/refman/5.0/en/describe.html

 37
Author: Surreal Dreams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-12 13:46:35

Robiłem to w przeszłości.

SELECT column_name
FROM information_schema.columns
WHERE table_name='insert table name here'; 
 15
Author: Jeff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-29 11:00:29

Edit: dzisiaj nauczyłem się lepszego sposobu na to. Zobacz odpowiedź ircmaxell.


Parse the output of SHOW COLUMNS FROM table;

Tutaj jest więcej o tym tutaj: http://dev.mysql.com/doc/refman/5.0/en/show-columns.html

 13
Author: The Pixel Developer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-12 14:09:28

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 table_name [jak 'name']". 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; }
 5
Author: user2558588,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-08 19:14:32

Użyj mysql_fetch_field(), Aby wyświetlić wszystkie dane kolumn. Zobacz Podręcznik .

$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 przestarzałe od wersji PHP 5.5.0 i zostanie usunięte w przyszłości."

 5
Author: Gavin Simpson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-08 11:05:03
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();
 3
Author: Abdul Gaffar Shah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-04 17:59:14

Jeśli chcesz sprawdzić całą strukturę tabeli za pomocą jakiegoś pliku, użyj tego kodu. W tym zapytaniu wybieram column_name, column_type i table_name, aby uzyskać więcej szczegółów . Używam order by column_type, więc mogę go ł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 podwójny typ, możesz to zrobić łatwo

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;

Tutaj wpisz opis obrazka

Jeśli chcesz sprawdzić, które pole pozwala na typ null 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;

Tutaj wpisz opis obrazka

Chcesz sprawdź więcej niż thik link również pomóc.

Https://dev.mysql.com/doc/refman/5.7/en/columns-table.html

 3
Author: Shafiqul Islam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-31 10:03:27

SHOW COLUMNS in mysql 5.1 (not 5.5) uses a temporary disk table.

Więc może być uważany za powolny w niektórych przypadkach. Może to przynajmniej zwiększyć wartość created_tmp_disk_tables. Wyobraź sobie jedną tymczasową tabelę dysków na połączenie lub na każde żądanie strony.

POKAŻ KOLUMNY nie jest tak powolny, prawdopodobnie dlatego, że używa pamięci podręcznej systemu plików. Phpmyadmin mówi ~ 0.5 ms konsekwentnie. To nic w porównaniu do 500ms-1000ms serwowania strony wordpress. Ale czasami to ma znaczenie. Jest zaangażowanie systemu dyskowego, nigdy nie wiadomo, co się dzieje, gdy serwer jest zajęty, pamięć podręczna jest pełna, dysk twardy jest zablokowany itp.

Pobieranie nazw kolumn przez SELECT * FROM ... LIMIT 1 wynosił około ~0.1 ms i może również używać bufora zapytań.

Więc oto mój mały zoptymalizowany kod do pobierania nazw kolumn z tabeli, bez użycia Pokaż kolumny 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:

  • dopóki pierwszy wiersz tabeli nie zawiera zakresu danych w megabajtach, powinien on działać poprawnie.
  • nazwy funkcji db_rows i db_row_ar należy zastąpić konkretną konfiguracją bazy danych.
 2
Author: Johan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-31 18:18:02

Nie wiem, czy tego szukałeś, ale mi to pomogło:

$query = query("DESC YourTable");  
$col_names = array_column($query, 'Field');

Który zwraca prostą tablicę nazw kolumn / nazw zmiennych w tabeli lub tablicy jako ciągi znaków, co jest potrzebne do dynamicznego budowania zapytań MySQL. Moją frustracją było to, że po prostu nie wiem, jak dobrze indeksować tablice w PHP, więc nie byłem pewien, co zrobić z wynikami z DESC lub SHOW. Mam nadzieję, że moja odpowiedź jest pomocna dla początkujących jak ja!

Aby sprawdzić wynik: print_r($col_names);

 2
Author: unami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-22 23:02:07

Wypróbuj ten sam ja osobiście go używam:

SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name' 
 2
Author: mohsin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-23 06:15:40

W WORDPRESS:

global $wpdb;   $table_name=$wpdb->prefix.'posts';
foreach ( $wpdb->get_col( "DESC " . $table_name, 0 ) as $column_name ) {
  var_dump( $column_name );
}
 1
Author: T.Todua,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-26 08:28:29

To pytanie jest stare, ale trafiłem tutaj szukając sposobu, aby znaleźć Dane Zapytanie, jego nazwy pól w sposób dynamiczny(niekoniecznie tylko pola tabeli). A ponieważ ludzie wciąż wskazują to jako odpowiedź na dane zadanie w innych powiązanych pytaniach, dzielę się sposobem, w jaki znalazłem, że można to zrobić, używając 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 modyfikować, aby wstawić nazwy pól w tablicy.

Za pomocą prostego: $sql="SELECT * FROM myTable LIMIT 1" można podać pola dowolnej tabeli, bez konieczność użycia SHOW COLUMNS lub jakiegokolwiek dodatkowego modułu php, w razie potrzeby (usunięcie części zrzutu danych).

Mam nadzieję, że to pomoże komuś innemu.
 1
Author: Gusstavv Gil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-24 06:52:29

Jeśli używasz php, użyj tego gist.

Może uzyskać pełne informacje o wybranych polach bez wyniku,i wszystkie niestandardowe pola, 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ższy sql nie zwróci żadnych danych, otrzyma również nazwy pól aname, bname, B ' s other field name

Tylko dwie linijki:

$query_info = mysqli_query($link, $data_source);
$fetch_fields_result = $query_info->fetch_fields();
 1
Author: zhi.yang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-25 02:14:24

To zapytanie pobiera listę wszystkich kolumn w bazie danych bez konieczności podawania 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 ono serię błędów. Mimo to zadziałało. Więc używaj go ostrożnie.

 1
Author: Ignat Ospadov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-24 16:27:18

Najprostsze rozwiązanie ze wszystkich odpowiedzi:

DESC `table name`

Lub

DESCRIBE `table name`

Lub

SHOW COLUMNS FROM `table name`
 1
Author: Gil Baggio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-28 16:07:10

Nie jestem ekspertem, ale to mi pasuje..

$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>";}    

}
 0
Author: Ad Kahn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-11 17:22:41