Ответы:
Лучше всего использовать виртуальную базу метаданных INFORMATION_SCHEMA . В частности, таблица INFORMATION_SCHEMA.COLUMNS ...
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
Это ОЧЕНЬ мощный и может дать вам тонны информации без необходимости разбора текста (например, тип столбца, является ли столбец обнуляемым, максимальный размер столбца, набор символов и т. Д.) ...
Да, и это стандартный SQL (тогда как SHOW ...
расширение для MySQL) ...
Для получения дополнительной информации о разнице между таблицами SHOW...
и их использовании INFORMATION_SCHEMA
, ознакомьтесь с документациейINFORMATION_SCHEMA
MySQL в целом ...
SET @@SESSION.sql_mode = 'ANSI_QUOTES';
раньше, но мне это не нравится. И у меня нет проблем с обратными галочками для разграничения идентификаторов. На самом деле, они мне нравятся больше, чем двойные кавычки (двойные кавычки заставляют запрос чувствовать себя неправильно) ... Каждому свое ...
Вы можете использовать следующий запрос для 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.
DESC TableName;
;-)
Кажется, есть 2 способа:
DESCRIBE `tablename`
или
SHOW COLUMNS FROM `tablename`
Подробнее DESCRIBE
здесь: http://dev.mysql.com/doc/refman/5.0/en/describe.html
DESCRIBE
это просто ярлык для SHOW COLUMNS FROM
.
DESC
еще короче DESCRIBE
!
Изменить : сегодня я узнал лучший способ сделать это. Пожалуйста, смотрите ответ ircmaxell.
Разобрать вывод SHOW COLUMNS FROM table;
Вот больше об этом здесь: http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
Используйте 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 и будет удалено в будущем».
mysqli_num_fields()
и mysqli_fetch_field_direct()
являются обновленными методами
Старая функция 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; }
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();
Не уверен, что это то, что вы искали, но это сработало для меня:
$query = query("DESC YourTable");
$col_names = array_column($query, 'Field');
Это возвращает простой массив имен столбцов / имен переменных в вашей таблице или массиве в виде строк, что мне и было необходимо для динамической сборки запросов MySQL. Мое разочарование было в том, что я просто не знаю, как индексировать массивы в PHP очень хорошо, поэтому я не был уверен, что делать с результатами DESC или SHOW. Надеюсь, мой ответ будет полезен для начинающих, как я!
Чтобы проверить результат: print_r($col_names);
если вы хотите проверить всю структуру таблицы с некоторыми полями, используйте этот код. В этом запросе я выбираю column_name, column_type и table_name для более подробной информации. Я использую порядок по 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;
если вы хотите проверить, в каком поле разрешен нулевой тип и т.д., вы можете использовать это
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;
Вы хотите проверить больше, чем эта ссылка также поможет вам.
В SHOW COLUMNS в mysql 5.1 (не 5.5) используется временная таблица дисков.
Так что в некоторых случаях это можно считать медленным. По крайней мере, он может поднять свой Created_tmp_disk_tables значение. Представьте себе одну временную таблицу дисков для каждого соединения или для каждого запроса страницы.
SHOW COLUMNS на самом деле не такой медленный, возможно, потому что он использует кеш файловой системы. Phpmyadmin говорит ~ 0,5 мс последовательно. Это ничто по сравнению с 500 мс-1000 мс, обслуживающих страницу WordPress. Но, тем не менее, бывают моменты, когда это важно. Присутствует дисковая система, вы никогда не знаете, что происходит, когда сервер занят, кеш заполнен, жесткий диск остановлен и т. Д.
Извлечение имен столбцов через SELECT * FROM ... LIMIT 1 было около ~ 0,1 мс, и он также может использовать кэш запросов.
Итак, вот мой маленький оптимизированный код для получения имен столбцов из таблицы без использования столбцов show, если это возможно:
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;
}
Ноты:
Попробуйте это, я лично использую это:
SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_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's other field name
всего две строчки:
$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`
если вам нужны только имена и типы полей (возможно, для простого копирования в Excel):
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='databasenamegoeshere'
AND DATA_TYPE='decimal' and TABLE_NAME = 'tablenamegoeshere'
удалять
DATA_TYPE='decimal'
если вы хотите все типы данных
Я не эксперт, но это работает для меня ..
$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>";}
}
Я пробовал этот запрос в SQL Server, и это сработало для меня:
SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')