Я предпочитаю использовать как можно меньше кода ...
Вы можете сделать это, используя IN
, попробуйте это:
SELECT *
FROM t1 WHERE (id,rev) IN
( SELECT id, MAX(rev)
FROM t1
GROUP BY id
)
, на мой взгляд, это меньше сложный ... легче читать и поддерживать.
Лучший способ - использовать виртуальную базу данных метаданных INFORMATION_SCHEMA . В частности, таблица INFORMATION_SCHEMA.COLUMNS ...
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
Это ОЧЕНЬ мощный и может предоставить вам информацию о TONS без необходимости синтаксического анализа текста (например, тип столбца, столбец является нулевым, максимальный размер столбца, набор символов и т. д.) ...
О, и это стандартный SQL (в то время как SHOW ...
является специфическим для MySQL расширением) ...
Для получения дополнительной информации о различии между SHOW...
и использованием таблиц INFORMATION_SCHEMA
, проверьте документацию MySQL на INFORMATION_SCHEMA
вообще ...
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();
i не эксперт, но это работает для меня ..
$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>";}
}
Самое простое решение из всех ответов:
DESC `table name`
или
DESCRIBE `table name`
или
SHOW COLUMNS FROM `table 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>";
}
}
Это может быть легко moded, чтобы вставить имена полей в массив.
С помощью простого: $sql="SELECT * FROM myTable LIMIT 1"
может предоставить вам поля любой таблицы, без необходимости использовать SHOW COLUMNS
или любой дополнительный php-модуль, если необходимо (удаление часть дампа данных).
Надеюсь, это поможет кому-то еще.
Этот запрос извлекает список всех столбцов в базе данных без указания имени таблицы. Он возвращает список только имен столбцов:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'db_name'
Однако, когда я запускал этот запрос в phpmyadmin, он отображал ряд ошибок. Тем не менее, это сработало. Поэтому используйте его с осторожностью.
SHOW COLUMNS в mysql 5.1 (не 5.5) использует временную таблицу диска.
Поэтому в некоторых случаях его можно считать медленным. По крайней мере, он может увеличить ваше значение created_tmp_disk_tables. Представьте себе одну временную таблицу диска для каждого соединения или для каждого запроса на страницу.
SHOW COLUMNS на самом деле не так медленно, возможно, потому, что он использует кеш файловой системы. Phpmyadmin говорит ~ 0.5ms последовательно. Это ничто по сравнению с 500 мс-1000 мс на странице wordpress. Но все-таки есть моменты. Существует дисковая система, вы никогда не знаете, что происходит, когда сервер занят, кеш заполнен, hdd застопорился и т. Д.
Извлечение имен столбцов через SELECT * FROM ... LIMIT 1 было около ~ 0.1ms , и он также может использовать кеш запросов.
Итак, вот мой небольшой оптимизированный код для получения имен столбцов из таблицы без возможности использования столбцов показа:
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;
}
Примечания :
, когда вы хотите проверить всю структуру таблицы с помощью некоторых файлов, используйте этот код. В этом запросе я могу найти имя_каталога, column_type и table_name для более подробной информации. Я использую порядок по столбцу_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;
, который хотите проверить больше, чем ссылка thik также поможет вам .
Попробуйте этот вариант, я лично его использую:
SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name'
Вы можете использовать следующий запрос для 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.
Я сделал это в прошлом.
SELECT column_name
FROM information_schema.columns
WHERE table_name='insert table name here';
Кажется, есть 2 способа:
DESCRIBE `tablename`
или
SHOW COLUMNS FROM `tablename`
Подробнее о DESCRIBE
здесь: http://dev.mysql.com/ DOC / RefMan / 5.0 / ен / describe.html
В WORDPRESS:
global $wpdb; $table_name=$wpdb->prefix.'posts';
foreach ( $wpdb->get_col( "DESC " . $table_name, 0 ) as $column_name ) {
var_dump( $column_name );
}
Изменить: Сегодня я узнал, как лучше это сделать. Пожалуйста, см. Ответ ircmaxell.
Разбор выходных данных SHOW COLUMNS FROM table;
. Здесь вы найдете более подробную информацию: http://dev.mysql.com/doc/ RefMan / 5.0 / ен / шоу-columns.html
Используйте mysql_fetch_field()
для просмотра всех данных столбца. См. manual .
$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 и будет удалено в будущем."
Не уверен, что это то, что вы искали, но это сработало для меня:
$query = query("DESC YourTable");
$col_names = array_column($query, 'Field');
Это возвращает простой массив имен столбцов / переменных в вашей таблице или массиве в виде строк, это то, что мне нужно для динамического создания MySQL-запросов. Мое расстройство состояло в том, что я просто не знаю, как очень хорошо индексировать массивы в PHP, поэтому я не был уверен, что делать с результатами DESC или SHOW. Надеюсь, мой ответ полезен для начинающих, таких как я!
Чтобы проверить результат: print_r($col_names);
Старая функция PHP «mysql_list_fields ()» устарела. Итак, сегодня лучшим способом получить имена полей является запрос «SHOW COLUMNS FROM 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; }
, если вы используете php, используйте этот gist .
он может получить полные сведения о выбранных полях без результата и все настраиваемые поля, такие как:
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();