Запрос MySQL для получения имен столбцов?
18 ответов
лучший способ-использовать information_schema для метаданные виртуальной базы данных. В частности,базы данных information_schema.Колонки таблица...
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
Это очень мощный и может дать вам тонны информации без необходимости разбора текста (например, колонного типа, допускает ли столбец значения null, максимальный размер столбца, набор символов и т. д.)...
О, и это стандартный SQL (тогда как SHOW ...
является конкретным расширением MySQL)...
дополнительные информация о разнице между SHOW...
и с помощью INFORMATION_SCHEMA
таблицы, проверьте MySQL документация INFORMATION_SCHEMA
В общем...
вы можете использовать следующий запрос для MYSQL:
SHOW columns FROM your-table;
Ниже приведен пример кода, который показывает, как реализовать выше синтаксис в php, чтобы перечислить имена столбцов:
$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
на странице: MySQL Refrence.
кажется, есть 2 пути:
DESCRIBE `tablename`
или
SHOW COLUMNS FROM `tablename`
подробнее о DESCRIBE
здесь:http://dev.mysql.com/doc/refman/5.0/en/describe.html
Я делал это в прошлом.
SELECT column_name
FROM information_schema.columns
WHERE table_name='insert table name here';
редактировать: сегодня я узнал, лучший способ сделать это. См. ответ ircmaxell.
парсить вывод SHOW COLUMNS FROM table;
вот еще об этом здесь:http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
старая функция PHP "mysql_list_fields ()" устарела. Итак, сегодня лучший способ получить имена полей-это запрос "показать столбцы из table_name [LIKE 'name']". Итак, вот небольшой пример:
$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; }
использовать mysql_fetch_field()
для просмотра всех данных столбца. См.руководство.
$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;
}
"предупреждение Это расширение является устаревшей начиная с версии PHP 5.5.0, и будет удалено в будущем."
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();
Если вы хотите проверить всю структуру таблицы с некоторыми поданными, то используйте этот код. В этом запросе я выбираю column_name, column_type и table_name для получения дополнительной информации . Я использую order BY column_type, чтобы легко его видеть.
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' order by DATA_TYPE;
Если вы хотите проверить только двойной тип файла, то вы можете сделать это легко
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;
Если вы хотите проверить, какое поле разрешает тип null и т. д., Вы можете использовать это
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;
вы хотите проверить больше, чем ссылка thik также поможет вам.
ПОКАЗАТЬ СТОЛБЦЫ в MySQL 5.1 (не 5.5) использует временную таблицу диска.
- http://dev.mysql.com/doc/refman/5.1/en/internal-temporary-tables.html
- http://dev.mysql.com/doc/refman/5.1/en/show-columns.html
поэтому в некоторых случаях его можно считать медленным. По крайней мере, он может поднять свой created_tmp_disk_tables значение. Представьте себе одну временную таблицу дисков на соединение или на каждый запрос страницы.
ПОКАЗАТЬ СТОЛБЦЫ - это не так уж медленно, возможно, потому, что он использует кэш файловой системы. Phpmyadmin говорит ~0,5 мс последовательно. Это ничто по сравнению с 500ms-1000ms обслуживания страницы wordpress. Но все же иногда это имеет значение. Вовлечение дисковой системы, вы никогда не знаете, что происходит, когда сервер занят, кэш заполнен, hdd заглох и т. д.
получение имен столбцов через ВЫБЕРИТЕ * FROM ... Предел 1 был около ~0,1 мс, и он также может использовать кэш запросов.
Итак, вот мой маленький оптимизированный код для получения имен столбцов из таблицы без использования показать колонки если можно:
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;
}
Примечания:
- пока первая строка таблицы не содержит диапазон мегабайт данных, она должна работать нормально.
- имена функций db_rows и db_row_ar должен быть заменен на вашу конкретную базу данных установка.
не уверен, что это то, что вы искали, но это сработало для меня:
$query = query("DESC YourTable");
$col_names = array_column($query, 'Field');
это возвращает простой массив имен столбцов / имен переменных в вашей таблице или массиве в виде строк, что мне нужно для динамического построения запросов MySQL. Мое разочарование было в том, что я просто не знаю, как индексировать массивы в PHP очень хорошо, поэтому я не был уверен, что делать с результатами DESC или SHOW. Надеюсь, мой ответ поможет новичкам, таким как я!
для проверки результата: print_r($col_names);
попробуйте это, я лично использую его:
SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name'
В WORDPRESS:
global $wpdb; $table_name=$wpdb->prefix.'posts';
foreach ( $wpdb->get_col( "DESC " . $table_name, 0 ) as $column_name ) {
var_dump( $column_name );
}
этот вопрос старый, но я здесь ищу способ найти данный запрос его имена полей динамическим способом (не обязательно только поля таблицы). И поскольку люди продолжают указывать это как ответ на эту задачу в других связанных вопросах, я делюсь тем, как я нашел, что это можно сделать, используя советы Гэвина Симпсона:
//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>";
}
}
Это можно легко модулировать для вставки имен полей в массив.
используя простой: $sql="SELECT * FROM myTable LIMIT 1"
может дать вам поля любой стол, без необходимости использовать SHOW COLUMNS
или любой дополнительный модуль php, если необходимо (удаление части дампа данных).
надеюсь, это поможет кому-то еще.
Если вы используете php, используйте это суть.
он может получить выбрать поля полную информацию без результата,и все пользовательские поля, такие как:
SELECT a.name aname, b.name bname, b.*
FROM table1 a LEFT JOIN table2 b
ON a.id = b.pid;
если выше sql не возвращает никаких данных, также получите имена полей aname, bname, другое имя поля b
всего две строки:
$query_info = mysqli_query($link, $data_source);
$fetch_fields_result = $query_info->fetch_fields();
этот запрос выбирает список всех столбцов в базе данных без указания имени таблицы. Он возвращает список только имен столбцов:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'db_name'
однако, когда я запустил этот запрос в phpmyadmin, он показал серию ошибок. Тем не менее, это сработало. Поэтому используйте его с осторожностью.
самое простое решение из всех ответов:
DESC `table name`
или
DESCRIBE `table name`
или
SHOW COLUMNS FROM `table name`
Я не эксперт, но это работает для меня..
$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>";}
}