Php mysql按状态统计订单的最佳方法

Php mysql按状态统计订单的最佳方法,php,mysql,Php,Mysql,对于我的面板,我用计数更新我的“状态按钮” F.e.新订单2,延期订单5,取消订单3,已发货201 在后面,我现在这样数他们: while($status = mysqli_fetch_array($query)){ $countSQL = $mysqli->query("SELECT id FROM orders WHERE status=".$status['id']." AND user=".$user); $countStatus

对于我的面板,我用计数更新我的“状态按钮”

F.e.新订单2,延期订单5,取消订单3,已发货201

在后面,我现在这样数他们:

while($status = mysqli_fetch_array($query)){
   $countSQL = $mysqli->query("SELECT id FROM orders WHERE status=".$status['id']." AND user=".$user);
   $countStatus = mysqli_num_rows($countSQL);
   // etc...
}
我知道。。。“使用事先准备好的陈述”。。。我将在我的脚本的更新版本中:-)

但是,有没有一种更简单的方法可以从特定用户那里获得所有订单,然后只接收每个“状态”的金额

我已经测试了以下各项,但在平均值中,差异是0.000024对0.000034。 所以速度更快,但我认为(并希望)有更好的方法吗

SELECT 
        SUM( CASE WHEN status = '1' THEN 1 ELSE 0 END ) AS one, 
        SUM( CASE WHEN status = '2' THEN 1 ELSE 0 END ) AS two, 
        SUM( CASE WHEN status = '3' THEN 1 ELSE 0 END ) AS three, 
        SUM( CASE WHEN status = '4' THEN 1 ELSE 0 END ) AS four, 
        SUM( CASE WHEN status = '5' THEN 1 ELSE 0 END ) AS five, 
        SUM( CASE WHEN status = '6' THEN 1 ELSE 0 END ) AS six, 
        SUM( CASE WHEN status = '7' THEN 1 ELSE 0 END ) AS seven, 
        SUM( CASE WHEN status = '8' THEN 1 ELSE 0 END ) AS eight, 
        SUM( CASE WHEN status = '9' THEN 1 ELSE 0 END ) AS nine, 
        SUM( CASE WHEN status = '10' THEN 1 ELSE 0 END ) AS ten, 
        SUM( CASE WHEN status = '11' THEN 1 ELSE 0 END ) AS eleven 
FROM orders 
WHERE user=$user

此外,当有新的可用状态(12,13,…)时,上面的方法也没有那么有用。

当状态值为动态时,您可以使用
分组方式

SELECT id, status, count(id) as total FROM orders WHERE user='userid' GROUP by status 

您是否想过只使用
按状态分组
?您能解释更多您的输入和所需的输出吗?第一个在循环中执行查询,这将无法很好地扩展。第二个是非常硬编码的,如果你的状态是12、13或14呢?只需使用
按状态分组
对行进行计数,这样做会更好。此查询的结果=0.000017秒我的“总和”-查询=0.000024秒第一次(活动-查询=0.000038秒