Mysql: pivot table 在 sqlfiddle 中工作但不在 phpmyadmin 中工作

Mysql: pivot table working in sqlfiddle but not working in phpmyadmin

我有一个在 sqlfiddle 中工作的关键 table 代码,当我在 phpmyadmin 中将它带回我的数据库时,我似乎无法使查询工作。

Here is my sqlfiddle.

当我在我的 localHost 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 中执行。

如果您想追查失败的 phpadmin,请添加 SELECT @sql; 并查看是否获得所需的查询。

在分析 phpMyAdmin bug reported for this question 时,我意识到此查询在某些服务器上有效而在其他服务器上失败,因此 MySQL 服务器不兼容而不是 phpMyAdmin 中的问题。不同的 MySQL 服务器版本在这种情况下表现不同(严格来说不遵循 MySQL 文档定义的语法)。

我测试过:

  • 在 MySQL 5.5.46 中查询在 phpMyAdmin 和命令行中均失败
  • 在 MariaDB 10.0.24 中,查询在 phpMyAdmin 和命令行中工作正常