簡體   English   中英

mysql根據不同條件更新不同的列

[英]mysql update different columns based on different conditions

我有這個簡單的表:

list1 (VARCHAR), list2 (VARCHAR), list3 (VARCHAR), list1cnt (INT), list2cnt (INT), list3cnt (INT)

現在,我想使用一個單一的mysql查詢來查看其中的哪些列表中包含單詞“ book”,並相應地更新適當的“ cnt”列。

因此,如果list1中包含單詞'book',則遞增list1cnt的值;

如果list2里面有單詞'book',則遞增list2cnt的值;

如果list3里面有單詞'book',則遞增list3cnt的值;

到目前為止,我的查詢是這樣(如您所見,我正在運行3個單獨的查詢)。

mysqli_query($link,"UPDATE table SET list1cnt+='1' WHERE list1 LIKE '%book%'");
mysqli_query($link,"UPDATE table SET list2cnt+='1' WHERE list2 LIKE '%book%'");
mysqli_query($link,"UPDATE table SET list3cnt+='1' WHERE list3 LIKE '%book%'");

現在,如果我在多組數據上使用它,我將發送3個查詢。 如果在PHP中使用mysqli_query傳遞每個查詢,則將花費更多時間,因此我正在直接在MYSQL中尋找具有IF和條件的3合1 MYSQL解決方案。 我發現了一些問題,但是問題是這行不通,所以我被卡住了:

UPDATE table SET `list1cnt`=(CASE WHEN `list1` LIKE '%book%' THEN (`list1cnt`+'1')) WHERE date<='$date'

您可以在update更改多個列。 在這種情況下,您需要條件更新:

UPDATE table
    SET list1cnt = (case when list1 like '%book% then  list1cnt + 1 else list1cnt end),
        list2cnt = (case when list2 like '%book% then  list2cnt + 1 else list2cnt end),
        list3cnt = (case when list3 like '%book% then  list3cnt + 1 else list3cnt end)
        list1cnt += 1
    WHERE list1 LIKE '%book%' or list2 LIKE '%book%' or list3 LIKE '%book%';

您可以只使用IF

UPDATE
  `table`
SET
  `list1cnt` = IF (`list1` LIKE '%book%', `list1cnt` + 1, `list1cnt`),
  `list2cnt` = IF (`list2` LIKE '%book%', `list2cnt` + 1, `list2cnt`),
  `list3cnt` = IF (`list3` LIKE '%book%', `list3cnt` + 1, `list3cnt`),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM