Php mysql按状态统计订单的最佳方法
对于我的面板,我用计数更新我的“状态按钮” F.e.新订单2,延期订单5,取消订单3,已发货201 在后面,我现在这样数他们: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
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秒