如果没有列更改,如何从MySQL获取Resultset

时间:2012-12-29 10:19:32

标签: php phpmyadmin mysqli

我有一张如下表

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

我使用了下面的proc

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,我在结果集中指定为列。

现在,当我添加New Location D时,它将成为新列。

您可以查看MySQL表here

1 个答案:

答案 0 :(得分:0)

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

有关结果集的信息可从metadata获得。对于MySQLi开头:

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

然后使用此功能将fetch_fields称为such

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

foreach ($fields as $field) {}

PDO具有类似的功能。