如何 select mysql 中的未知列数?

How to select Unknown Number of Columns in mysql?

鉴于某些列的 table 和名称,我有以下信息架构 select 查询。

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')

但是这个 select 没有给我 select 每个未知列的行值。我得到的只是未知列的名称。是否可以 select 行的值,以便我可以在我的 php 脚本中将列作为键,将行作为值对?我需要在其他 table 中插入列名和行值。请帮助或建议。

SELECT * FROM table_nametable_name 中选择所有列及其值。您正在使用的是从架构 table 中选择所有列名(不包含 table_name 中的信息)。

您可以在 PHP 中使用 SELECT * FROM table_name 并仅使用 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();
?>

好吧,我不明白为什么你有一个 table 可以动态添加列而不是明显的列,但这里有一个建议,希望对你有所帮助

如果您 运行 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 

如果您将其加载到一个数组中,然后在以后的查询中删除您不想 select 的行,您将获得它们的列名(在 Field 列中),如果需要,甚至可以得到它们的数据类型他们。

然后您可以使用此数组为您的列特定查询构建字段列表,并且您还知道在处理任何结果时如何调用它们。

希望对您有所帮助。

下面是显示相交的非常快速的尝试 table。

这使您可以拥有固定的结构并即时添加费用类型。

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