我對PHP IF()和ELSEIF()完全沒問題。但是今天我開始使用MySQL命令,我有一個很長的MySQL查詢,我無法理解我如何修改它。有問題了解MySQL IF()和ELSE()
下面是代碼:
$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";
我需要做的就是創建一個ELSE語句,如果p.delivery等於 '2',並添加以下代碼:
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
格式的上述內容,然後我可以用它來重寫其他查詢?謝謝。
首先要認識到:sql不是一種編程語言。所以最好的做法是甚至不嘗試將命令式編程習慣用於它。 – zerkms 2015-02-10 00:48:38
將語句轉換爲'case'。 。 。它會更有意義。 – 2015-02-10 01:00:56
好吧,我將不得不規範我的數據庫,如果我想這個工作。我把東西作爲一個數組存儲在一個表格單元中是愚蠢的。由於這份工作對我來說太過艱難,我已經去oDesk聘請一個人,我知道我的侷限性。但是,感謝所有人關心/ Luke – 2015-02-10 14:17:29