【问题标题】:How to get Resultset from MySQL if no of columns changes如果没有列更改,如何从 MySQL 获取结果集
【发布时间】:2012-12-29 10:19:31
【问题描述】:

我有一个如下表

CREATE TABLE Statistics(Stat_Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
                        Period  VARCHAR(55),
                        Location VARCHAR(255),
                        Rate_per_SqFt INT)

INSERT INTO Statistics(Period, Location, Rate_per_SqFt)
                VALUES('June', 'Location A', 2500),
                      ('June', 'Location B', 2740),
                      ('June', 'Location C', 3200),
                      ('July', 'Location A', 2650),
                      ('July', 'Location B', 2800),
                      ('July', 'Location C', 3250),
                      ('August', 'Location A', 2750),
                      ('August', 'Location B', 2950),
                      ('August', 'Location C', 3230),
                      ('October', 'Location A', 2950),
                      ('October', 'Location B', 3950),
                      ('October', 'Location C', 3530);

我使用了下面的过程

DROP PROCEDURE IF EXISTS test.stats_report;
CREATE PROCEDURE test.`stats_report`()
BEGIN
SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE WHEN Location = ''',
      Location,
      ''' then Rate_per_SqFt ELSE 0 end) AS ',
      CONCAT('`',Location,'`')
    )
  ) INTO @sql
FROM statistics;

SET @sql = CONCAT('SELECT Period, ', @sql, ' 
                   FROM Statistics 
                   GROUP BY Period');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END;

它带来如下输出

 Period   Location A     Location B     Location C 
 June        2500          2740           3200
 July        2650          2800           3250
 August      2750          2950           3230
 October     2950          3950           3530 

由于我在 MySQL 过程中动态生成列,我不知道如何使用 MySQLi 绑定方法或其他任何方法从 PHP 中的结果集中获取行。

如何从 Result set 中获取不知道列数的行。

请注意,我想要位置 A、位置 B 和位置 C,我在结果集中指定为列。

现在,当我添加新位置 D 时,它将作为新列出现。

您可以查看 MySQL 表 here

【问题讨论】:

    标签: php phpmyadmin mysqli


    【解决方案1】:

    您始终可以将结果集中的行作为数组处理,并使用 foreach 循环遍历它们。您没有包含您的 PHP 代码,所以我们不知道这是通过 PDO 还是 MySQLi.. 所以这可能有点离题.. 但是..

    有关结果集的信息可从metadata 获得。对于MySQLi,请以:

    /* get resultset for metadata */   
    $result = $stmt->result_metadata();
    

    然后用这个调用fetch_fieldssuch

    /* Get field information for all columns */
    $fields = $result->fetch_fields();
    
    foreach ($fields as $field) {}
    

    PDO有类似的功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 2015-01-21
      相关资源
      最近更新 更多