【问题标题】:Select from MySQL Pivot Stored Procedure using PHP使用 PHP 从 MySQL Pivot 存储过程中选择
【发布时间】: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


【解决方案1】:
猜你喜欢
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 2010-12-15
  • 2013-07-08
  • 2011-02-10
  • 2014-09-07
  • 2011-01-07
  • 1970-01-01
相关资源
最近更新 更多