我有一个在 sqlfiddle 中工作的数据透视表代码,当我在 phpmyadmin 中将其带回我的数据库时,我似乎无法让查询工作。
这是我的 sqlfiddle。
当我在我的本地主机phpmyadmin中运行它时,查询将如下所示:
SET @@group_concat_max_len = 5000;# MySQL returned an empty result set (i.e. zero rows).
SET @sql = NULL;# MySQL returned an empty result set (i.e. zero rows).
SELECT GROUP_CONCAT(DISTINCT
CONCAT('MAX(IF(hw_id = ', hw_id, ', score, -1)) AS ',
CONCAT('`hw', hw_id, '`'))) INTO @sql
FROM mk;# 1 row affected.
SET @sql = CONCAT('SELECT st.id, ', @sql,
' FROM st LEFT JOIN mk ON st.id = mk.st_id GROUP BY st.id');
# MySQL returned an empty result set (i.e. zero rows).
PREPARE stmt FROM @sql;# MySQL returned an empty result set (i.e. zero rows).
EXECUTE stmt;# Rows: 3
DEALLOCATE PREPARE stmt;# MySQL returned an empty result set (i.e. zero rows).
如您所见,我也更改了group_concat_max_len...但什么都没有改变...
在分析为此问题报告的phpMyAdmin错误时,我意识到此查询在某些服务器上有效,而在其他服务器上失败,因此它是MySQL服务器不兼容而不是phpMyAdmin中的问题。在这种情况下,不同的MySQL服务器版本的行为不同(严格来说,它不遵循MySQL文档定义的语法)。
我已经测试过:
- 在MySQL 5.5.46中,查询在phpMyAdmin和命令行中都失败
- 在MariaDB 10.0.24中,查询在phpMyAdmin和命令行中都可以正常工作
将其构建到存储过程中,然后在phpmyadmin中执行。
如果你想追求失败的phpadmin,添加SELECT @sql;
,看看你是否得到了想要的查询。