我正在尝试连续创建一个数据透视列,但是在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中为前端显示这样的列和行。
感谢。
答案 0 :(得分:0)
您正在单个query()方法调用中运行多个查询。标准MySQL数据库驱动程序具有在单个调用中执行多个sql查询的单独方法,但CI使用标准调用,该调用仅允许每次调用执行单个sql命令。
在单独的CI查询调用中执行每个sql语句:
RESOURCES
虽然您可以自己在php中完成所有字符串连接,但您根本不需要使用MySQL的预编译语句。