как подсчитать конкретные столбцы и отобразить данные в таблице в соответствии со значением count в mysql php pdo? [Дубликат]

Я предпочитаю использовать как можно меньше кода ...

Вы можете сделать это, используя IN, попробуйте это:

SELECT * 
FROM t1 WHERE (id,rev) IN 
( SELECT id, MAX(rev)
  FROM t1
  GROUP BY id
)

, на мой взгляд, это меньше сложный ... легче читать и поддерживать.

216
задан Haroldo 12 November 2010 в 14:42
поделиться

18 ответов

Лучший способ - использовать виртуальную базу данных метаданных 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 вообще ...

409
ответ дан ircmaxell 27 August 2018 в 08:21
поделиться
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
ответ дан Abdul Gaffar Shah 27 August 2018 в 08:21
поделиться

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

}
0
ответ дан Ad Kahn 27 August 2018 в 08:21
поделиться

Самое простое решение из всех ответов:

DESC `table name`

или

DESCRIBE `table name`

или

SHOW COLUMNS FROM `table name`
1
ответ дан Gil Baggio 27 August 2018 в 08:21
поделиться

Этот вопрос старый, но я нашел способ поиска заданного запроса его имена полей динамическим способом (не обязательно только поля таблицы). И поскольку люди продолжают указывать это как ответ на эту заданную задачу в других связанных вопросах, я разделяю то, как я нашел, что это можно сделать, используя советы Гевина Симпсона:

//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-модуль, если необходимо (удаление часть дампа данных).

Надеюсь, это поможет кому-то еще.

1
ответ дан Gusstavv Gil 27 August 2018 в 08:21
поделиться

Этот запрос извлекает список всех столбцов в базе данных без указания имени таблицы. Он возвращает список только имен столбцов:

SELECT COLUMN_NAME
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE table_schema = 'db_name'

Однако, когда я запускал этот запрос в phpmyadmin, он отображал ряд ошибок. Тем не менее, это сработало. Поэтому используйте его с осторожностью.

1
ответ дан Ignat Ospadov 27 August 2018 в 08:21
поделиться

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

Примечания :

  • Пока ваша первая строка не содержит мегабайтный диапазон данных, она должна работать нормально.
  • Названия функций db_rows и db_row_ar должны быть заменены вашим конкретным настройка базы данных.
2
ответ дан Johan 27 August 2018 в 08:21
поделиться

, когда вы хотите проверить всю структуру таблицы с помощью некоторых файлов, используйте этот код. В этом запросе я могу найти имя_каталога, 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 также поможет вам .

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

3
ответ дан Shafiqul Islam 27 August 2018 в 08:21
поделиться

Попробуйте этот вариант, я лично его использую:

SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name' 
2
ответ дан SHAZ 27 August 2018 в 08:21
поделиться

Вы можете использовать следующий запрос для 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.

156
ответ дан stillstanding 27 August 2018 в 08:21
поделиться

Я сделал это в прошлом.

SELECT column_name
FROM information_schema.columns
WHERE table_name='insert table name here'; 
15
ответ дан Stony 27 August 2018 в 08:21
поделиться

Кажется, есть 2 способа:

DESCRIBE `tablename`

или

SHOW COLUMNS FROM `tablename`

Подробнее о DESCRIBE здесь: http://dev.mysql.com/ DOC / RefMan / 5.0 / ен / describe.html

34
ответ дан Surreal Dreams 27 August 2018 в 08:21
поделиться

В WORDPRESS:

global $wpdb;   $table_name=$wpdb->prefix.'posts';
foreach ( $wpdb->get_col( "DESC " . $table_name, 0 ) as $column_name ) {
  var_dump( $column_name );
}
1
ответ дан T.Todua 27 August 2018 в 08:21
поделиться

Изменить: Сегодня я узнал, как лучше это сделать. Пожалуйста, см. Ответ ircmaxell.


Разбор выходных данных SHOW COLUMNS FROM table;

. Здесь вы найдете более подробную информацию: http://dev.mysql.com/doc/ RefMan / 5.0 / ен / шоу-columns.html

12
ответ дан The Pixel Developer 27 August 2018 в 08:21
поделиться

Используйте 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 и будет удалено в будущем."

5
ответ дан tony gil 27 August 2018 в 08:21
поделиться

Не уверен, что это то, что вы искали, но это сработало для меня:

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

Это возвращает простой массив имен столбцов / переменных в вашей таблице или массиве в виде строк, это то, что мне нужно для динамического создания MySQL-запросов. Мое расстройство состояло в том, что я просто не знаю, как очень хорошо индексировать массивы в PHP, поэтому я не был уверен, что делать с результатами DESC или SHOW. Надеюсь, мой ответ полезен для начинающих, таких как я!

Чтобы проверить результат: print_r($col_names);

2
ответ дан unami 27 August 2018 в 08:21
поделиться

Старая функция 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; }
5
ответ дан user2558588 27 August 2018 в 08:21
поделиться

, если вы используете 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();
1
ответ дан zhi.yang 27 August 2018 в 08:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: