Відповіді:
Найкращим способом є використання віртуальної бази даних метаданих 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;;-)
Здається, є два способи:
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-column.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 ()" застаріла. Отже, на сьогодні найкращим способом отримання назв полів є запит "ПОКАЖИТИ КОЛІНІ З ІМЕНА таблиці [LIKE 'ім'я']". Отже, ось невеликий приклад:
$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);
коли ви хочете перевірити всю структуру таблиці з деякими поданими файлами, використовуйте цей код. У цьому запиті я вибираю ім'я стовпця, тип стовпця та ім’я таблиці_ для отримання більш детальної інформації. Я використовую замовлення за стовпчиком_типу, щоб я міг легко бачити його.
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) використовує тимчасову таблицю дисків.
Тож це може вважатися повільним для деяких випадків. Принаймні, воно може підміняти ваше створене значення_dmp_disk_tables. Уявіть одну таблицю тимчасових дисків за з'єднання або за кожний запит на сторінку.
SHOW COLUMNS насправді не так повільно, можливо, тому що він використовує кеш файлової системи. Phpmyadmin каже ~ 0,5 мс послідовно. Це ніщо в порівнянні з 500мс-1000мс розміщення сторінки Wordpress. Але все ж, буває, що це має значення. Є задіяність дискової системи, ви ніколи не знаєте, що відбувається, коли сервер зайнятий, кеш заповнений, hdd застопорився і т.д.
Отримання імен стовпців через SELECT * FROM ... LIMIT 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;
}
Примітки:
Спробуйте це, я особисто його використовую:
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 інше ім'я поля
всього два рядки:
$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, він відобразив ряд помилок. Тим не менш, це спрацювало. Тому використовуйте його обережно.
якщо вам потрібні лише імена та типи полів (можливо, для простого вставки копії в 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')