这个MySQL查询有问题吗?

时间:2010-02-09 22:22:57

标签: mysql conditional-operator

我正在尝试更新编码严重的网站,我认为此多重IF语句中存在错误。我已经谷歌搜索了一段时间,在MySQL UPDATE查询中找不到任何多个IF的例子。

我们想要根据行的不同列更新行的某一列。

以下是查询:

$sql = "UPDATE `pet_colors` AS c
SET c.inshop = 
IF(c.rarity='1', '25',
IF(c.rarity='2', '10',
IF(c.rarity='3', '3', '1')))
WHERE c.species='{$p->species}' AND c.buyable='1' LIMIT ".rand(1,3));

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

为什么不使用CASE语句而不是使用imbricated IF?它会“一样好”(或者说是坏的,透视问题),但更容易阅读。

[•••] SET c.inshop = CASE c.rarity WHEN '1' THEN '25' WHEN '2' THEN '10' WHEN '3' THEN '3' ELSE '1' END [•••]

答案 1 :(得分:1)

不,我不认为这是一个错误,而是一组嵌套的IF。在我看来,通过案例陈述会更容易理解。

e.g。


Case c.rarity
When '1' then '25'
When '2' then '10'
When '3' then '3'
Else '1'
End