【发布时间】:2019-12-16 04:12:56
【问题描述】:
我正在尝试使用来自该站点的 MySQL 数据透视表 - http://mysql.rjweb.org/doc.php/pivot - 使用 MySQL 和 PHP 创建和选择数据透视表。到目前为止,我已经将存储过程保存到 MySQL 并且运行良好。当我进入服务器上的 MySQL 控制台并输入下面的查询时,我会收到预期的数据/结果。
CALL Pivot('`rates-short`', '`Hotel_Name`', '`CheckIn_Date`',
'`Discount_Percentage`', "WHERE `Num_Nights` = 1", '');
但是,当我在 PHP 中调用相同的 SQL 语句时,我没有得到任何数据。相反,我得到了下面的文本(来自 PHP print_r)。如何获取数据透视数据?
Array ( [@stmt] => SELECT GROUP_CONCAT(CONCAT(
'SUM(IF(`CheckIn_Date` = ', '"', val, '"', ',
`Discount_Percentage`, 0)) AS ', '"', val, '"')
SEPARATOR ", ") INTO @sums
FROM ( SELECT DISTINCT `CheckIn_Date` AS val
FROM `rates-short`
WHERE `Num_Nights` = 1
ORDER BY 1
) AS top )
我尝试了许多不同的 PHP MySQL/MySQLi/存储过程代码变体,它们都返回相同的内容。这是我目前拥有的。
<?php
$dbhost = xxx;
$dbuser = xxx;
$dbpass = xxx;
$dbname = xxx;
try {
$pdo = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
$sql = "CALL Pivot('`rates-short`', '`Hotel_Name`', '`CheckIn_Date`',
'`Discount_Percentage`', 'WHERE `Num_Nights` = 1', '')";
$q = $pdo->query($sql);
$q->setFetchMode(PDO::FETCH_ASSOC);
}
catch (PDOException $e) {
die("Error occurred:" . $e->getMessage());
}
while ($r = $q->fetch()) {
echo count($r);
print_r($r);
}
?>
【问题讨论】:
-
什么版本的 MySQL?能否提供
SHOW CREATE TABLE `rates-short`;
标签: php mysql stored-procedures pivot-table