MariaDB 中的动态数据透视表无法在 php 中查询

问题描述 投票:0回答:1

嘿,你们能帮我吗,我需要将这个查询转换成 PHP 代码。

set @sql = (
    select group_concat(distinct 
        concat(
            "sum(case when `test_id`='",test_id, "' then `points` ELSE '0' end) as `", `test_id`, "`"
        )
    ) 
    from test_answered WHERE checked = '1'
);
set @sql = concat("select url_id, ", @sql, " from test_answered group by `url_id`");
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;

我不能在 php 中尝试该代码。顺便说一句,我正在使用 PDO。所以这对我来说很难。

我试试这个代码

$quer = "SELECT url_id,test_id,points,GROUP_CONCAT(DISTINCT CONCAT('SUM(CASE WHEN test_id = 'test_id' THEN points ELSE '0' END))') AS test FROM  test_answered WHERE checked = '1' GROUP BY id";
    $arr4 = ['test_id'=>$array];
    $data3 = $test_a->query($quer);

但它给了我这个

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 你的SQL语法有错误;检查与您的 MariaDB 服务器版本对应的手册,了解在第 1 行的 '' THEN points ELSE '0' END))') AS test FROM test_answered WHERE checked = '1...' 附近使用的正确语法

php mariadb pivot-table
1个回答
0
投票

您的查询中似乎省略了一些引号和逗号。

无论如何试试:

<?php
$conn = new  PDO(/* HERE_THE_CONNECTION_STRING */, $user, $pwd);

$innerPivotQuery = <<<SQL
 SELECT GROUP_CONCAT(DISTINCT CONCAT(" SUM(CASE WHEN `test_id`='", test_id, "'  THEN `points` ELSE '0' END) as `", `test_id`, "`")) 
 FROM test_answered WHERE checked = '1'
SQL;

$pivotQuery = <<<SQL
 SELECT CONCAT("SELECT url_id,",
               ($innerPivotQuery),
               " FROM test_answered GROUP BY `url_id`");
SQL;

$pivotStmt = $conn->query($pivotQuery);
$query = $pivotStmt->fetch()[0];

$stmt = $conn->query($query);

$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

这是一个例子,你必须添加错误管理

© www.soinside.com 2019 - 2024. All rights reserved.