我完全可以使用PHP IF()和ELSEIF()。然而今天我开始使用MySQL命令,我有一个很长的MySQL查询,我无法理解我如何修改它。
以下是代码:
$db->colums[] = "
IF(
(SELECT
IF(p.delivery = '1',IF(distance < deliverymilesto1, deliverysurcharge1,
IF (distance < deliverymilesto2, deliverysurcharge2,
IF (distance < deliverymilesto3, deliverysurcharge3,
IF (distance < deliverymilesto4, deliverysurcharge4,
IF(distance < deliverymilesto5,deliverysurcharge5,0)
)
)
)
), 0)
FROM products prod WHERE prod.id_product = p.id_product
) > 0,
(p.price + (SELECT
IF(p.delivery = '1',IF(distance < deliverymilesto1, deliverysurcharge1,
IF (distance < deliverymilesto2, deliverysurcharge2,
IF (distance < deliverymilesto3, deliverysurcharge3,
IF (distance < deliverymilesto4, deliverysurcharge4,
IF(distance < deliverymilesto5,deliverysurcharge5,0)
)
)
)
), 0)
FROM products prod WHERE prod.id_product = p.id_product
)),
(p.price)
)as pricedelivery";
如果p.delivery等于&#39; 2&#39;,我需要做的是创建一个ELSE语句,并添加以下代码:
IF(p.delivery = '2', IF(find_in_set('".$outcoder."', deliveryoutcode1), deliveryoutcharge1,
IF(find_in_set('".$outcoder."', deliveryoutcode2), deliveryoutcharge1, deliveryoutcharge2, 0)), 0)
在PHP中,这很简单:
if($delivery = '1') {
...code here
} elseif($delivery = '2') {
...otherwise
}
但我无法理解如何更改我的声明的逻辑。也许我的大脑已经累了,因为我今天一直在学习正常化。任何人都可以帮助我,谢谢。
编辑:基于我迄今为止所学到的关于MySQL的知识,我整个上午花了整整一段时间来清理MySQL,其结果高于上面。
但是,我现在希望能够根据我收到的有用评论,使用case
重写此内容。我在我的页面上有5个这样的MySQL查询,我想知道是否有人能够以case
格式重写上述内容,然后我可以用它来重写其他查询?谢谢。
答案 0 :(得分:2)
SELECT
price +
case delivery
when '1' then
case
when distance < deliverymilesto1 then deliverysurcharge1
when distance < deliverymilesto2 then deliverysurcharge2
when distance < deliverymilesto3 then deliverysurcharge3
when distance < deliverymilesto4 then deliverysurcharge4
when distance < deliverymilesto5 then deliverysurcharge5
else 0
end
when '2' then
case
when distance < deliverymilesto1 then deliveryoutcharge1
when distance < deliverymilesto2 then deliveryoutcharge2
when distance < deliverymilesto3 then deliveryoutcharge3
when distance < deliverymilesto4 then deliveryoutcharge4
when distance < deliverymilesto5 then deliveryoutcharge5
else 0
end
else 0
end
FROM products
IF()
功能与您习惯的分支不同。第一个参数是一个条件,第二个参数是当条件计算结果为true时返回的内容,第三个参数是相反的情况,它是假的。
上面的代码只是在第三个参数(else分支)中使用了很多嵌套来完成你通常使用IF ... ELSE ...或等同于CASE
表达式的内容
您必须将其纳入查询的其余部分,因为您已将其中一部分删除。