这是我的问题:
UPDATE mytable
SET mycol = mycol +
(CASE id
WHEN ? THEN 5
WHEN ? THEN 10
WHEN ? THEN 15
WHEN ? THEN 20
END)
WHERE id IN (?, ?, ?, ?)
我需要为所有这些条件调查另一个条件。所以我写这样的查询:
UPDATE mytable
SET mycol = mycol +
(CASE
WHEN id = ? AND $bool THEN 5
WHEN id = ? AND $bool THEN 10
WHEN id = ? AND $bool THEN 15
WHEN id = ? AND $bool THEN 20
END)
WHERE id IN (?, ?, ?, ?)
此^查询有效。但正如你所看到我写了一个常量条件($bool
- 这是一个PHP变量,它多次包含1
或0
)。现在我正在寻找一种MySQL语法,让我可以为所有情况编写一次$bool
。这可能吗?
答案 0 :(得分:3)
您可以使用IF
:
UPDATE mytable
SET mycol = mycol + IF($bool, (CASE
WHEN id = ? THEN 5
WHEN id = ? THEN 10
WHEN id = ? THEN 15
WHEN id = ? THEN 20
END), 0)
WHERE id IN (?, ?, ?, ?)
如果$bool
为true
,则CASE
表达式返回的值将添加到mycol
,否则会添加0
。