我有一张有订单的桌子。每个订单数有多个订单行。对于每一行,在“diff”列中都有一个数字,指示是否提供了完整的行。零或零下,线是完整的,1或以上,这条线是不完整的。
我需要输出全部订单和待处理订单总数。
在一些帮助下,我得到了一些帮助,比如创建一个接近但在PHP脚本中没有输出任何结果的SQL查询:
$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中直接运行下面的查询,就会得到下面列出的输出:
SELECT ord_number, MAX( IF( diff <=0, 'COMPLETED', 'PENDING' ) )
FROM tb_raw_orderfill
GROUP BY (
ord_number
)输出:
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-样本数据:
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发布于 2013-12-18 16:56:30
这是杰西卡答案的修正版本:
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;这应该返回两行,如下所示:
Status | Total
----------|--------
COMPLETED | ####
PENDING | ####然后,您可以这样阅读结果:
$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的答案。
发布于 2013-12-18 16:50:38
如果您只需要已完成/待处理订单的摘要,我不明白您为什么需要MAX函数。我也不明白为什么您需要使用while循环。
我会这么做..。
$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'];我还没有真正尝试过你的例子,但我相信这是可行的。
发布于 2013-12-18 16:24:51
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()查看列名。
https://stackoverflow.com/questions/20663167
复制相似问题