Я полностью разбираюсь в 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
}
Но я просто не могу понять логику изменения моего статута. Может быть, мой мозг устал, потому что сегодня я узнал о нормализации. Может ли кто-нибудь помочь мне здесь, спасибо.
EDIT: Я провел весь день, очищая MySQL, результат которого выше, основываясь на том, что я до сих пор узнал о MySQL.
Тем не менее, теперь я хотел бы переписать это с использованием case
, основываясь на полезных комментариях, которые я получил. У меня есть 5 таких запросов MySQL на моей странице, и мне интересно, может ли кто-то быть достаточно любезен, чтобы переписать выше в формате case
, тогда я могу использовать это, чтобы переписать другие запросы? Спасибо.
Первое, что нужно реализовать: sql не является языком программирования. Поэтому лучше всего было бы даже не пытаться применять к нему императивные идиомы программирования. – zerkms
Преобразование заявления в 'case'. , , это будет иметь больший смысл. –
Хорошо, мне нужно будет нормализовать мою базу данных, если я хочу, чтобы это сработало. Мне глупо хранить материал в виде массива в ячейке таблицы. Я уезжаю в ODesk, чтобы нанять кого-то, поскольку эта работа слишком сложна для меня, я знаю свои пределы. Но спасибо всем за заботу/Luke –