繁体   English   中英

根据相同或不同的值检查并更新行

[英]Check and update the row depending on same or different value

如果所有行的值都设置为相同的值,我试图更新状态。

我的查询像这样

$ord = "SELECT * FROM plitems WHERE pur_order_id='".$order_id."'";
    $ord1 = mysqli_query($con, $ord);

    while($ord2 = mysqli_fetch_array($ord1)) {

        if(($ord2['invoice_status']=='Invoiced')) 
        {
            $m5 = mysqli_query($con, "UPDATE pur_orders SET status='Invoiced' WHERE pur_order_id='".$order_id."'");

        }
        else
        {
            $m5 = mysqli_query($con, "UPDATE pur_orders SET status='Partial' WHERE pur_order_id='".$order_id."'");

        }

但是这里我在plitems表中有2个订单项,第一个订单项的状态为Invoiced ,第二个订单项的状态为Partial ,但仍将pur_orders状态设置为Invoiced而不是Partial

使用使用GROUP BY的查询查找状态相同的订单。

UPDATE pur_orders AS p
CROSS JOIN (
      SELECT MAX(invoice_status) AS invoice_status
      FROM plitems
      WHERE pur_order_id = $order_id
      HAVING COUNT(DISTINCT invoice_status) = 1) AS t
SET p.status = t.invoice_status
WHERE p.pur_order_id = $order_id

如果只有一种状态,则子查询将返回具有该状态的一行,然后将其分配给pur_orders.status 如果状态不止一个,则子查询将不返回任何行,因此CROSS JOIN将产生一个空的叉积,并且不会更新任何内容。

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM