如何在mysql中选择未知的列数?

时间:2015-08-19 12:55:54

标签: php mysql select where-clause information-schema

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

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脚本中将列作为键和行作为值对?我需要在其他表中插入列名和行值。请帮忙或建议。

3 个答案:

答案 0 :(得分:1)

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

您可以在PHP中使用SELECT * FROM table_name,只需使用mysqli_fetch_assoc来获取一个关联数组,该数组基本上是key => value数组,其中key是列名和{ {1}}是数组中给定行中该列的值。

从PHP文档(http://php.net/manual/en/mysqli-result.fetch-assoc.php)中拉出目录,因为你想要一个例子:

value

答案 1 :(得分: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
);

答案 2 :(得分: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 

如果将其加载到数组中,然后删除您不想在后面的查询中选择的行,则可以获得它们的列名(在“字段”列中),甚至是它们的数据类型(如果需要)。

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

我希望这会有所帮助。