【问题标题】:Mysql: pivot table working in sqlfiddle but not working in phpmyadminMysql:在 sqlfiddle 中工作但在 phpmyadmin 中不工作的数据透视表
【发布时间】:2016-06-10 14:19:32
【问题描述】:

我有一个在 sqlfiddle 中工作的数据透视表代码,当我将它带回 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...但没有任何改变...

【问题讨论】:

    标签: mysql dynamic phpmyadmin pivot-table


    【解决方案1】:

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

    我已经测试过了:

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

    【讨论】:

    • 两者的偏差在哪里?
    • 不确定它们是否有偏差,我猜新的 MySQL 服务器的行为与 MariaDB 相同(我在其中测试了更新的版本)。
    【解决方案2】:

    将其构建为存储过程,然后在 phpmyadmin 中执行。

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

    【讨论】:

    • 谢谢!我认为它可以提供帮助...但是您能帮我将其构建到存储过程中吗?我尝试在“例程选项卡”中执行此操作,但它面临错误
    猜你喜欢
    • 1970-01-01
    • 2018-07-19
    • 2018-06-19
    • 1970-01-01
    • 2013-03-29
    • 2015-05-17
    • 2023-04-05
    • 2016-01-20
    • 2012-07-07
    相关资源
    最近更新 更多