嘿,你们能帮我吗,我需要将这个查询转换成 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
$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);
这是一个例子,你必须添加错误管理