0

私は以下のようなテーブルを持っています

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 Procedure で列を動的に生成するので、PHP で MySQLi Bind Method などを使用して結果セットから行を取得する方法がわかりません。

列数がわからない結果セットから行を取得する方法。

結果セットの列として指定した場所 A、場所 B、および場所 C が必要であることに注意してください。

新しい場所 D を追加すると、新しい列になります。

ここでMySQLテーブルを見ることができます

4

1 に答える 1

0

結果セットの行を常に配列として操作し、foreach を使用してそれらをループ処理することができます。PDOPHP コードが含まれていないため、これが経由なのかMySQLi.. なのかわかりませんので、少し的外れかもしれません..

結果セットに関する情報は、メタデータから入手できます。まずMySQLi始めに:

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

次に、これを使用して次fetch_fieldsように呼び出します。

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

foreach ($fields as $field) {}

PDOにも同様の機能があります。

于 2012-12-29T14:08:42.927 に答える