Как выбрать Неизвестное количество столбцов в 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

Решение

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

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

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();
?>
1

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

Если вы запускаете 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

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

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

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

0
По вопросам рекламы [email protected]