2012-12-29 41 views
0

我有一个表像下面如何从MySQL获得结果集,如果没有列的改变

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中的任何方法从PHP中的结果集中获取行别的东西。

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

请注意我希望位置A,位置B和位置C,我将它指定为结果集中的列。

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

你可以看看MySQL表here

回答

0

您可以用来自行设置为一个数组的结果总是工作,并通过他们使用的foreach循环。你没有包含你的PHP代码,所以我们不知道这是否是通过PDOMySQLi ..所以这可能是一个有点离谱.. ..

关于ResultSet的信息可从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具有类似的功能。