在php中从一行创建动态枢轴列


Creating a dynamic pivot column from a row in php

我试图创建一个枢轴列出一行,但得到一些挑战与php。当我在mysql控制台运行我的查询时,它工作得很好并返回所需的值。但当我在php中运行它时,它返回mysql语法错误。我没能弄清楚真正的问题是什么。下面分别是普通mysql和php的查询

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'sum(case when Ref_Month = ''',
      Ref_Month,
      ''' then Total_Income end) AS ''',
      Ref_Month, ''''
    )
  ) INTO @sql 
FROM  mytable; 
SET @sql = CONCAT('SELECT Tone_Name, ', @sql, ' FROM mytable  WHERE Ref_Year in (2015) GROUP BY Tone_Name limit 10');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
为PHP/codeigniter

$query = $this->db->query("SET @sql = NULL;SELECT GROUP_CONCAT(DISTINCT CONCAT('sum(case when Ref_Month = ''', Ref_Month, ''' then Total_Income end) AS ''', Ref_Month, '''')) INTO @sql FROM  mytable; SET @sql = CONCAT('SELECT Tone_Name, ', @sql, ' FROM mytable  WHERE Ref_Year in (2015) GROUP BY Tone_Name limit 10'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;");

收到的错误信息是:

数据库发生错误错误号:1064语法错误près de 'SELECT GROUP_CONCAT(DISTINCT CONCAT('sum(case when Ref_Month = " ', Ref_Month, " à la ligne 1

谁来帮帮我。我也想知道如何显示这样的列和行在HTML/PHP的前端。

谢谢。

在单个query()方法调用中运行多个查询。标准的MySQL数据库驱动程序有单独的方法在一个调用中执行多个sql查询,但是CI使用标准调用,每个调用只允许执行一个sql命令。

在单独的CI查询调用中执行每个sql语句:

$this->db->query("SET @sql = NULL");
...
$this->db->query("DEALLOCATE PREPARE stmt");

虽然你可以自己在php中完成所有的字符串连接,所以你根本不需要使用MySQL的准备语句