php - 在 php 中从一行创建动态数据透视列

标签 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;

对于 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;");

收到的错误消息是:

A Database Error Occurred Error Number: 1064 Erreur de syntaxe 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 的准备语句。

关于php - 在 php 中从一行创建动态数据透视列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38100802/

相关文章:

php - 使用 codeigniter 根据选定的 id 显示图像

javascript - 间隔一段时间后用来自 mysql 的数据重新加载 PHP 页面

mysql - 将行表格表移动到另一个具有附加数据的表格

php - Codeigniter 链式查询问题

php - WordPress .htaccess RewriteRule 不工作

mysql - SQL MAX() 函数返回错误的元组/结果

php - CodeIgniter 将多维数组作为单独的行插入到数据库表中

php - 如何使用 mysqli 准备好的语句更新数据库?

javascript - 动态 HTML ID(PHP、Java 和一些 SQL)

javascript - JQuery UI 全尺寸日历 - 从 PHP 获取 JSON 数据