php - 如果条件为真,则在使用两个不同的语句时使用 CASE 语句

标签 php mysql

  1. 我需要显示从 Market wise 表中检索的数据。对于每个市场,可以计算和显示订单数量和商品数量。我只有一个栏目,即市场,但我需要以水平方式显示市场。

我已经尝试创建临时表来实现这一点。无论如何我得到了结果,但不准确。

    $MarketQry="SELECT DISTINCT `Market` FROM `orders`";
    $MarketResult=mysql_query($MarketQry,$con);
    $OrdersQry="";
    while($mvalue=mysql_fetch_array($MarketResult))
    {
        $OrdersQry.="CASE WHEN `Market`='".$mvalue['Market']."' THEN SUM(`Count`) ELSE 0 END AS `".$mvalue['Market']." -Number of Orders`, CASE WHEN `Market`='".$mvalue['Market']."' THEN SUM(`Records`) ELSE 0 END AS `".$mvalue['Market']." -Number of Order Line Items`,";              
    }

$createqry="CREATE TEMPORARY TABLE `temp_order_market` AS 
        SELECT ".$OrdersQry."`OrderDate` FROM 
        (SELECT COUNT(DISTINCT `OrderID`) AS `Count`,COUNT(`OrderID`) AS `Records`,`OrderDate`,`Market` 
        FROM `orders` 
        WHERE (`OrderDate` BETWEEN '$StartDate' AND '$EndDate')  
        GROUP BY `OrderDate`) 
        ) AS `dummy` GROUP BY `OrderDate` ORDER BY `OrderDate` DESC";

echo $createqry."<br /><br />"; 

$resQry=mysql_query($createqry,$con) or die(mysql_error($con));

$selectqry="SELECT * FROM `temp_order_market`";
  1. 无论我得到什么结果都不准确。因为如果我得到个别市场的结果,我就会得到准确的结果。以下是我用于获取个别市场结果的查询。

    SELECT SUM(`Count`) AS `Orders`,SUM(`Records`) AS `Records`,`OrderDate` FROM 
                (SELECT COUNT(DISTINCT `OrderID`) AS `Count`,COUNT(`OrderID`) AS `Records`,`OrderDate` 
                FROM `orders` 
                WHERE (`OrderDate` BETWEEN '2015-01-01' AND '2015-01-31') AND `Market`='$MarketName' 
                GROUP BY `OrderDate`)) AS `dummy` GROUP BY `OrderDate` ORDER BY `OrderDate` DESC";
    

现在我的问题是:

  1. 除了这个方法我们还能做这个吗/这有可能实现我正在使用的方法吗?

  2. 我怀疑我编写的查询的 CASE 语句。

请分享您的想法。提前致谢。

最佳答案

将 SUM() 添加到 $OrderQry,它现在工作正常。

$OrdersQry.="CASE WHEN `Market`='".$mvalue['Market']."' THEN SUM(`Count`) ELSE 0 END AS `".$mvalue['Market']." -Number of Orders`, CASE WHEN `Market`='".$mvalue['Market']."' THEN SUM(`Records`) ELSE 0 END AS `".$mvalue['Market']." -Number of Order Line Items`,";

替换为

$OrdersQry.="SUM(CASE WHEN `Market`='".$mvalue['Market']."' THEN SUM(`Count`) ELSE 0 END) AS `".$mvalue['Market']." -Number of Orders`, SUM(CASE WHEN `Market`='".$mvalue['Market']."' THEN SUM(`Records`) ELSE 0 END) AS `".$mvalue['Market']." -Number of Order Line Items`,";

关于php - 如果条件为真,则在使用两个不同的语句时使用 CASE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30885084/

相关文章:

phpmailer - 以下 SMTP 错误 : Data not accepted

javascript - WooCommerce:根据所选的运输方式显示或隐藏结账字段和部分

mysql - 选择并更新 SQL 表(一键完成)

c# - 连接必须有效且打开才能保存到 MySql

php - 即使行数据未更改也更新 MySQL 时间戳

php - 在 PHP 中生成快速伪随机数据

php - 如何使用循环在左侧分配空格

php - 如何在 mysql 中对长字符串值使用 like

php - 无法检索每条记录的额外查询的值?

mysql - 是否可以像使用 Google Cloud 一样从我的开发机器连接到 Bluemix MySql?