从php中的行创建动态数据透视表列

时间:2016-06-29 13:19:09

标签: php mysql codeigniter

我正在尝试连续创建一个数据透视列,但是在php中遇到了一些挑战。当我在mysql consol中运行我的查询时,它运行良好并返回所需的值。但是当我在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;

for 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 Erreur de syntaxeprèsde'SELECTGROUP_CONCAT(DISTINCT CONCAT('sum(Ref_Month =''',Ref_Month,''la la ligne 1

的情况)

有人请帮助我。我还想知道如何在HTML / PHP中为前端显示这样的列和行。

感谢。

1 个答案:

答案 0 :(得分:0)

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

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

RESOURCES

虽然您可以自己在php中完成所有字符串连接,但您根本不需要使用MySQL的预编译语句。