mysql根据不同的条件更新不同的列

时间:2014-01-28 15:45:07

标签: php mysql sql

我有这个简单的表格:

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传递,每个查询都会花费更多时间,所以我正在寻找一个3in1 MYSQL解决方案,其中包含IF和MYSQL中的条件。我找到了一些东西,但问题是这不起作用,所以我被困住了:

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

2 个答案:

答案 0 :(得分:1)

您可以更改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%';

答案 1 :(得分:1)

您可以使用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`),