首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中返回MySQL查询的值

在PHP中返回MySQL查询的值
EN

Stack Overflow用户
提问于 2013-12-18 16:18:31
回答 3查看 2.2K关注 0票数 0

我有一张有订单的桌子。每个订单数有多个订单行。对于每一行,在“diff”列中都有一个数字,指示是否提供了完整的行。零或零下,线是完整的,1或以上,这条线是不完整的。

我需要输出全部订单和待处理订单总数。

在一些帮助下,我得到了一些帮助,比如创建一个接近但在PHP脚本中没有输出任何结果的SQL查询:

代码语言:javascript
复制
$result = mysql_query("SELECT ord_number, MAX( IF( diff <=0,'COMPLETED','PENDING')) FROM  $tabl GROUP BY (ord_number)");

while($row = mysql_fetch_assoc($result)){
    echo $row['COMPLETED'];
    echo $row['PENDING'];
}

如果我在PHPMySQL中直接运行下面的查询,就会得到下面列出的输出:

代码语言:javascript
复制
SELECT ord_number, MAX( IF( diff <=0,  'COMPLETED',  'PENDING' ) ) 
FROM tb_raw_orderfill
GROUP BY (
ord_number
)

输出:

代码语言:javascript
复制
00000P1-OR28622 COMPLETED
00000P1-OR28623 COMPLETED
00000P1-OR28624 COMPLETED
00000P1-OR28625 COMPLETED
00000P1-OR28626 PENDING
00000P1-OR28627 COMPLETED
00000P1-OR28628 COMPLETED
00000P1-OR28629 COMPLETED
00000P1-OR28630 COMPLETED
00000S1-OR02107 PENDING
00000S1-OR02108 COMPLETED
00000S1-OR02109 COMPLETED
00000S1-OR02110 COMPLETED
00000S1-OR02111 PENDING

这是正确的结果,这几乎是我需要数他们不知何故不确定。结果应该是

待决:3

完成: 11

任何帮助都非常感谢。

编辑1-样本数据:

代码语言:javascript
复制
Product Code    Quantity Ordered    QT Allocated    Diff    Number  Date    Quantity Supplied To Date   Status
code1   10  0   0   00000P1-OR28621 14/11/2013  10  A
code2   20  0   10  00000P1-OR28621 14/11/2013  10  S
code3   20  0   0   00000P1-OR28621 14/11/2013  20  S
code1   120 0   0   00000P1-OR28621 14/11/2013  120 A
code2   2   0   0   00000P1-OR28622 14/11/2013  2   A
code2   10  0   0   00000P1-OR28623 14/11/2013  10  A
code1   10  0   0   00000P1-OR28623 14/11/2013  10  A
code3   10  0   0   00000P1-OR28623 14/11/2013  10  A
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-18 16:56:30

这是杰西卡答案的修正版本:

代码语言:javascript
复制
SELECT
     a.Status
    ,COUNT( a.ord_number ) AS Total
FROM (
    SELECT
         ord_number
        ,IF( MAX(diff) <= 0, 'COMPLETED', 'PENDING' ) AS Status
    FROM $table
    GROUP BY ord_number
) a
GROUP BY a.Status;

这应该返回两行,如下所示:

代码语言:javascript
复制
Status    | Total
----------|--------
COMPLETED | ####
PENDING   | ####

然后,您可以这样阅读结果:

代码语言:javascript
复制
$Completed = 0;
$Pending = 0;

while($row = mysql_fetch_assoc($result)) {
    switch( $row['Status'] ) {
      case "COMPLETED":
          $Completed = $row['Total'];
          break;
      case "PENDING":
          $Pending = $row['Total'];
          break;
    }
}

如果您想要一列同时包含两个总数的行,那么请参阅Itsols的答案。

票数 0
EN

Stack Overflow用户

发布于 2013-12-18 16:50:38

如果您只需要已完成/待处理订单的摘要,我不明白您为什么需要MAX函数。我也不明白为什么您需要使用while循环。

我会这么做..。

代码语言:javascript
复制
$result = mysql_query("SELECT 
(Select count(ord_number) as completed From $tabl Where diff<=0) as completed, 
(Select count(ord_number) as pending From $tabl Where diff>=1) as pending");

$row = mysql_fetch_assoc($result);
echo $row['completed'];
echo $row['pending'];

我还没有真正尝试过你的例子,但我相信这是可行的。

票数 1
EN

Stack Overflow用户

发布于 2013-12-18 16:24:51

代码语言:javascript
复制
SELECT * FROM 
(
    SELECT 
    count(ord_number) AS total,
    MAX(IF(diff <=0,  'COMPLETED',  'PENDING')) AS type
    FROM tb_raw_orderfill
) a
GROUP BY a.type

编辑:使用子查询。

Edit2:另外,您的PHP无法工作的原因是您没有为max()函数分配别名,并且没有名为“已完成”或“挂起”的列。一旦得到一个有效的查询,就可以使用print_r()查看列名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20663167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档