programing

MariaDB의 동적 피벗 테이블이 php에서 작동하지 않는 쿼리

mytipbox 2023. 8. 6. 15:02
반응형

MariaDB의 동적 피벗 테이블이 php에서 작동하지 않는 쿼리

얘들아, 내가 이 쿼리를 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);

하지만 그것은 나에게 이것을 줍니다.

치명적 오류:발견되지 않은 PDO 예외: SQLSTATE[42000]:구문 오류 또는 액세스 위반: 1064 SQL 구문에 오류가 있습니다. 마리아DB 서버 버전에 해당하는 설명서에서 "THEN points '0' END(끝)" 근처에서 사용할 올바른 구문을 확인하십시오.) AS test_answerfrom WHERE가 1행에서 확인됨 = '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);

예를 들어, 오류 관리를 추가해야 합니다.

언급URL : https://stackoverflow.com/questions/75973656/dynamic-pivot-table-in-mariadb-not-working-query-in-php

반응형