我在 symfony 上创建了一个自定义存储库查询来计算价格。这是查询:
$sql = " SELECT
SUM(sub.totalPriceWT) AS totalPrice,
c.label
FROM (
SELECT
v.id,
(
SELECT SUM(priceWT)
FROM JSON_TABLE(
JSON_UNQUOTE(JSON_EXTRACT(v.dac, '$.bdc.service.operator.entries[*].priceWT')),
'$[*]' COLUMNS(priceWT DECIMAL(10, 2) PATH '$')
) der
) AS totalPriceWT
FROM valid v
JOIN sheet s ON v.sheet_id = s.id
JOIN step st ON s.step_id = st.id
WHERE JSON_UNQUOTE(JSON_EXTRACT(v.dac, '$.type')) = 'bdc'
AND (
(YEAR(s.sent_date) = :currentYear AND CAST(JSON_EXTRACT(v.dac, '$.anticipated') AS SIGNED) = :anticipated2)
OR
(YEAR(s.sent_date) = :previousYear AND CAST(JSON_EXTRACT(v.dac, '$.anticipated') AS SIGNED) = :anticipated1)
)
AND s.perimeter_id = :perimeter
AND JSON_UNQUOTE(JSON_EXTRACT(v.dac, '$.bdc.service.operator.entries')) IS NOT NULL
AND st.slug != 'rejetee'
) AS sub
JOIN valid v2 ON sub.id = v2.id
JOIN sheet s2 ON v2.sheet_id = s2.id
JOIN cost_center c ON s2.cost_center_id = c.id
GROUP BY c.id
";
$conn = $this->manager->getConnection();
$stmt = $conn->prepare($sql);
$stmt->bindValue('perimeter', $perimeter->getId());
$stmt->bindValue('currentYear', $year);
$stmt->bindValue('previousYear', $year - 1);
$stmt->bindValue('anticipated1', 1);
$stmt->bindValue('anticipated2', 0);
$resultSet = $stmt->executeQuery();
$resultBDC = $resultSet->fetchAllAssociative();
问题是我遇到了这种错误:
执行查询时发生异常:SQLSTATE[42000]:语法 错误或访问冲突:1064 您的 SQL 语法有错误; 检查与您的 MariaDB 服务器版本对应的手册 在 '( JSON_UNQUOTE(JSON_EXTRACT(v.dac, 第 9 行的“$.bdc.serv...”
我似乎找不到我的语法有任何问题。我想这可能是服务器问题,因为奇怪的是错误显示 “检查与您的 MariaDB 服务器相对应的手册”,但我以为我在 MySQL 上。
编辑:我在 MariaDB 上。
我输入以下命令:
php bin/console debug:container --env-vars
php bin/console debug:config doctrine dbal
输出显示我确实在 mySQL /pdo_mySQL 上。
我不明白问题出在哪里。
来自 https://mariadb.com/kb/en/json_table/
MariaDB 10.6.0 中添加了 JSON_TABLE。
MariaDB 中并非所有 JSON 功能都被植入,有些功能只是较晚才实现。