2013-07-05 2 views
4
.... 
..... 
if ($prod_price->RecordCount()>0) { 
       $p_price = $prod_price->fields['options_values_price']; 
      } 
      else 
      { 
       $p_price = $orders_products_query->fields['products_price']; 
      } 
      $p_price = ($p_price>0)?$p_price:$orders_products_query->fields['final_price']; 
...... 
.......... 

Как вы можете догадаться из вышеизложенного, я запускаю два разных запроса и проверяю 3 поля, чтобы определить переменную $ p_price в PHP. Я хочу сконденсировать это в одном запросе, при условии, что: Если поле1 равно Null, используйте поле2, если поле2 равно 0, используйте поле 3.Как сделать эту тройную операцию в mysql?

Первая часть может быть решена с помощью IFNULL (field1, field2). ... но что мне делать со второй частью? Должен ли я использовать случай? Мне нужно самое эффективное решение с точки зрения скорости выполнения, потому что это часть чрезвычайно большого запроса.

EDIT:

Так как кажется, вопрос не ясно, что некоторые из вас, возьмите это в качестве альтернативы.

IF(IFNULL(field1,field2)>0,IFNULL(field1,field2),field3) выше MySQL условие запроса работает с указанной выше логики, но, как вы можете видеть, он оценивает field1 и FIELD2 дважды для проверки NULL, что я не верю, является очень эффективным, так что я ищу с лучший запрос/условие, чтобы переписать то же самое.

+0

Лучший способ узнать это, попробовав его на большом наборе данных и сделайте несколько эталонных тестов. – mzedeler

+2

где находится 'mysql' часть ?? – Nauphal

+0

'mysql part' в основном я прошу наилучшего способа переписать это в запросе mysql:' IF (IFNULL (field1, field2)> 0, IFNULL (field1, field2), field3) ' – Bluemagica

ответ

7

Вы можете использовать IF(condition, val-if-true, val-if-false) в MySQL.

Вы можете также гнездо IF() функции, что-то вроде этого:

IF(field1 IS NOT NULL, field1, IF(field2 <> 0, field2, field3)) 

Это соответствует:

  • Если field1 является NOT NULL, используйте field1, в противном случае ...
  • Если поле2 отличное от нуля, используйте поле2, в противном случае ...
  • Поле использования3
+0

спасибо, но field2 не является NULL, это либо 0, либо какое-то другое число – Bluemagica

+0

@aoi. Я обновил свой ответ, чтобы проверить поле2 на ненулевое значение вместо not-null. – jcsanyi

1

вы можете использовать, как показано ниже

lets Try this : 

select if(Id is null, 0, id) as Id; 

А также MySQL обеспечивая очень хорошее document к вам условного оператора

Кроме того, если еще одних случаях вы можете использовать как

SELECT USER_ID, (CASE USER_ID WHEN 1 THEN 1 ELSE 0 END) as FIRST_USER FROM USER 

дайте мне знать, если я могу помочь вам дальше.

1

Стандартная функция SQL COALESCE выглядит то, что вам нужно:

COALESCE (а, б, в, г, «банан») означает, что выражение будет принимать на первое ненулевого значения он сталкивается, работая слева направо. Он достаточно эффективен и занимает всего несколько процессорных циклов.

Он может принимать как можно больше параметров, от двух до газиллиона.

Смежные вопросы