Получить из списка имена столбцов + типы данных - PullRequest
0 голосов
/ 13 мая 2019

У меня есть несколько (довольно стандартных) (MySQL) запросов, которые выглядят так:

select *
from table_one a
left join table_two on a.id = b.id
left join table_three c on b.id = c.id.

table_one выглядит так:

id (int)
label (varchar(15)

table_two выглядит так:

id (int)
name (varchar(20)

table_three выглядит так:

id (int)
some_field_name (varchar(25)

Таким образом, результат будет следующим:

id|label|id|name|id|some_field_name|
..|.....|..|....|..|...............|

Теперь я хотел бы иметь список с именами столбцов (и, желательно, также) с типами столбцов, которые его запрос выдаст

как это

id(int)
label (varchar(15)
id (int)
name varchar(20)
id (int)
some_field_name (varchar(25)

Я знаю, что могу использовать таблицу INFORMATION_SCHEMA.COLUMNS, чтобы получить эту информацию, но мне все равно придется вручную выполнить этот запрос для каждой таблицы и самостоятельно составить список для каждого запроса.

Я бы предпочел функцию, которая могла бы кормить запрос и которая затем возвращала бы список имен полей + типов полей.

Ответы [ 2 ]

1 голос
/ 15 мая 2019

У нас есть $ stmt-> getColumnMeta () в php для получения метаданных столбца

<?php
$user = 'root';
$pass = 'infiniti';
$DB = 'test';
$host = 'localhost';

$c = new \PDO('mysql:host='.$host.';dbname='.$DB, $user, $pass);
$c->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

$dataQuery = 'select * from info limit 3';

$stmt = $c->prepare($dataQuery);
$stmt->execute();
$rs = $stmt->fetchAll(\PDO::FETCH_ASSOC);

echo $stmt->columnCount();
for($i = 0; $i < $stmt->columnCount(); $i++)
{
    print_r($stmt->getColumnMeta($i));
}


output

Array
(
    [native_type] => LONG
    [pdo_type] => 2
    [flags] => Array
        (
            [0] => not_null
            [1] => primary_key
        )

    [table] => info
    [name] => id
    [len] => 11
    [precision] => 0
)
Array
(
    [native_type] => VAR_STRING
    [pdo_type] => 2
    [flags] => Array
        (
        )

    [table] => info
    [name] => fname
    [len] => 60
    [precision] => 0
)
Array
(
    [native_type] => VAR_STRING
    [pdo_type] => 2
    [flags] => Array
        (
        )

    [table] => info
    [name] => lname
    [len] => 60
    [precision] => 0
)
0 голосов
/ 13 мая 2019
I guess only the data of the column (not the data type and data length) will be returned to any scripting language.
if it takes long time to get datatype of col's used in queries, you could retrieve all col's datatype and store it in a variable, or in a CSV. 
This will work as long as you have few tables with minimum columns.

select 
COLUMN_NAME
DATA_TYPE
from
information_schema.columns c
where
c.TABLE_SCHEMA = 'DATABASE_NAME';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...