我有一个如下表
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 中的结果集中获取行。
如何从结果集中获取列数未知的行。
请注意,我想要位置 A、位置 B 和位置 C,我在结果集中指定为列。
现在,当我添加新位置 D 时,它将作为新列出现。
您可以在这里查看 MySQL 表