Навигация

Поиск по Сайту

Партнеры

Самоучитель. Книги.

Статистика

    Каталог@Mail.ru - каталог ресурсов интернет

Урок 6.5: Функции ветвления в MySQL

Главная Страница » Книги по PHP » MySQL уроки для начинающих с нуля » Функции ветвления в MySQL

Иногда надо, чтобы запрос вел себя по-разному в различных ситуациях. Для этого существуют способы разветвит его на разные направления, в зависимости от различных внешних условий выполнения.

IFNULL(expr1, ехрr2)

Если expr1 не NULL, IFNULL () вернет expr1, иначе expr2. IFNULL() возвращает числовое или строковое значение в зависимости от контекста, в котором оно используется:

mysql> select IFNULL(1,0);
    -> 1
mysql> select IFNULL(NULL,10);
    ->10
mysql> select IFNULL(1/0,10);
    ->10
mysql> select IFNULL(1/0,'yes');
    -> "yes"

NULLIF(expr1, expr2)

Если expr1=expr2, вернет NULL, иначе возвращает expr1. Это работает так-же, как CASE WHEN х=у THEN NULL ELSE x END (рассмотрено чуть ниже):

mysql> select NULLIF(1,1);
    -> NULL
mysql> select NULLIF(1,2);
    -> 1

Обратите внимание, что expr1 будет оценен дважды в MySQL, если параметры равны.

IF(expr1, expr2, ехрrЗ)

Если expr1 равно TRUE (expr1 <> 0 и exprl <> NULL), то IF() вернет ехрr2, иначе вернет ехрrЗ. IF() возвращает числовое или строковое значение в зависимости от контекста, в котором это используется:

mysql> select IF(1>2,2,3);
    -> 3
mysql> select IF(1<2,'yes','no');
    -> “yea"
mysql> select IF(strcmp("test",'test1'),'no','yes');
    -> "no"

Выражение expr1 будет оценено как целочисленное значение. Это означает, что, если вы проверяете выражение с плавающей запятой или строку, вы должны сделать следующее для корректного использования операции сравнения:

mysql> select IF(0.1,1,0);
    -> 0
mysql> select IF(0.1<>0,1,0);
    -> 1

В первом случае выше IF (0.1) вернет 0 потому, что 0.1 преобразован в целочисленное значение, возникающее в результате в IF (0). Во втором случае сравнение проверяет первоначальное значение с плавающей запятой, чтобы видеть, является ли оно отличным от нуля. Результат сравнения используется как целое число. Заданный по умолчанию тип возврата IF () (который может иметь значение, когда это значение будет сохранено во временной таблице) вычислен в MySQL 3.23 следующим образом (табл. 6.1):

Таблица 6.1. Типы возврата для IF()

Выражение Возвращаемое значение
ехрr2 или ехрrЗ возвращает строку Строка
ехрr2 или ехрrЗ возвращает значение с плавающей запятой Число с плавающей запятой
ехрr2 или ехрrЗ возвращает целое число Целое число
ехрr2 или ехрrЗ возвращает строку Строка

CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END или CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END.

Это очень интересный и сложный оператор. Он позволяет не просто выбрать один из двух вариантов выполнения, а разделить запрос на столько вариантов, на сколько нужно. Хоть на сто.

Первая версия возвращает result, где value = compare - value. Вторая версия возвращает результат для первого же условия, которое является истинным. Если не имелось никакого значения результата для соответствия, то будет возвращен результат, указанный после ELSE. Если не имеется части ELSE, то вернется NULL:

mysql> SELECT CASE 1 WHEN 1 THEN «one» WHEN 2 THEN «two» ELSE «more» END;
    -> «one»
mysql> SELECT CASE WHEN 1>0 THEN «true» ELSE «false» END;
    -> «true»
mysql> SELECT CASE BINARY «В» when «а» then 1 when «b» then 2 END;
    -> NULL

Тип значения возврата (INTEGER, DOUBLE или STRING) такой же, как и тип первого возвращенного значения (выражение после первого THEN).