簡體   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