2015-08-19 3 views
0

Учитывая таблицу и имена некоторых столбцов, у меня есть следующий запрос выбора информационной схемы.Как выбрать Неизвестное количество столбцов в mysql?

SELECT `COLUMN_NAME` 
       FROM `INFORMATION_SCHEMA`.`COLUMNS` 
        WHERE `TABLE_SCHEMA` = 'm_college' 
        AND `TABLE_NAME` = 'm_fee' 
        AND COLUMN_NAME NOT IN ('id', 'classid', 'semid') 

Но этот выбор не дает мне значения строк для каждого неизвестного столбца, который я выбираю. Все, что у меня есть, это имена неизвестных столбцов. Можно ли выбрать значения строк, чтобы я мог иметь столбец как ключ и строки как пару значений в моем PHP-скрипте? Мне нужно вставить имена столбцов и значения строк в другую таблицу. Пожалуйста, помогите или предложите.

+0

Почему бы вам не использовать select * –

+0

Потому что мне нужны динамические столбцы. –

+1

Информационная_ссылка содержит только метаданные, т. Е. Данные о данных. Он используется MYSQL для записи и определения того, какие схемы/базы данных/таблицы/поля/типы полей/индексы и т. Д. Существуют в этом экземпляре сервера MYSQL. Он не содержит фактические данные, которые вы храните в своей базе данных. – RiggsFolly

ответ

1

Ниже представлена ​​очень быстрая попытка отображения таблицы пересечений.

Это позволяет вам иметь фиксированную структуру и добавлять типы сборов на лету.

CREATE TABLE IF NOT EXISTS `mz_fee222` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `classid` int(11) NOT NULL, 
    `semid` int(11) NOT NULL, 
    `batch` year(4) NOT NULL, 
    `session` int(11) NOT NULL 
); 

create table fee_type 
( fee_id int auto_increment primary key, 
    description varchar(100) 
); 
insert fee_type (description) values ('exam'),('marksheet'),('admitcard'),('centre'),('practical'); -- etc as you go 

create table mz_fee_intersect 
( -- here is where the fee amount is stored. Flexible. 
    id int auto_increment primary key, 
    mz_id int not null, -- this is the id from my_fee222 table 
    fee_id int not null, -- this is the fee_id from fee_type table 
    fee int not null, -- here is the actual fee, like 100 bucks 
    -- FK's below (not shown): 

    -- 
    unique key (mz_id,fee_id) -- forbids duplicates 
); 
1

SELECT * FROM table_name выбирает все столбцы и их значения от table_name. То, что вы используете, выбирает все имена столбцов из таблицы схем (которые не содержат информацию в вашем table_name).

Вы можете использовать SELECT * FROM table_name в PHP и просто использовать mysqli_fetch_assoc, чтобы получить ассоциативный массив, который является в основном key => value массивом, key этого имя столбца и value этим значение для этого столбца в данной строке в массиве.

Вытащил Каталог из PHP документации (http://php.net/manual/en/mysqli-result.fetch-assoc.php), потому что вы хотели пример:

<?php 
$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 

/* check connection */ 
if ($mysqli->connect_errno) { 
    printf("Connect failed: %s\n", $mysqli->connect_error); 
    exit(); 
} 

$query = "SELECT * FROM table_name"; 

if ($result = $mysqli->query($query)) { 

    /* fetch associative array */ 
    while ($row = $result->fetch_assoc()) { 
     printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]); 
    } 

    /* free result set */ 
    $result->free(); 
} 

/* close connection */ 
$mysqli->close(); 
?> 
+0

Мне нужно, потому что я хочу динамически вставлять имя столбца в качестве значения строки в другую таблицу. –

+0

Вы можете использовать вышеприведенное в PHP и просто использовать 'mysqli_fetch_assoc' для получения ассоциативного массива, который в основном представляет собой массив' key => value, где 'key' - это имя столбца, а значение' value' - это значение для этого столбца в данной строке массива. – honerlawd

+0

Просто дайте мне пример ... –

0

Хорошо, я не могу думать, почему у вас есть таблица, которая получает столбцы добавляются динамически, кроме очевидного, но здесь предположение, что Я надеюсь, поможет

Если вы запустите DESCRIBE tablename и соберите результаты, вы получите набор результатов примерно так.

Field  Type    Null Key Default Extra 

id   int(10) unsigned NO  PRI NULL  auto_increment 
parent_id int(11)    NO  MUL 0  
lft   int(11)    NO  MUL 0  
rgt   int(11)    NO    0  
level  int(10) unsigned NO    NULL 
name  varchar(50)   NO  UNI NULL 
title  varchar(100)  NO    NULL 
rules  varchar(5120)  NO    NULL 

Если вы загрузите это в массив, а затем падения строк вы не хотите, чтобы выбрать в последующем запросе, вы получите их имена столбцов (в столбце Field) и даже их тип данных, если вы хотите их.

Затем вы можете использовать этот массив для создания списка полей для вашего конкретного запроса по столбцу, а также знать, как их вызвать, когда вы обрабатываете какие-либо результаты.

Надеюсь, это поможет.

Смежные вопросы