Приднестровская поддержка XOOPS
Также в SQL-запросах можно использовать следующие функции:
□ IF(<Условие>, <Если Истина>, <Если Ложь>) — функция для логиче- ского выбора. Если <Условие> истинно, то возвращается значение выражения <Если Истина>, в противном случае возвращается значение выражения <Если Ложь>;
SELECT IF(5>6, 'Больше', 'Меньше');
/* Выведет: Меньше */
□ CASE() — функция для логического выбора. Имеет две формы записи.
Первая форма:
CASE <Переменная или выражение>
WHEN <Значение 1> THEN <Выражение 1>
[WHEN <Значение 2> THEN <Выражение 2>]
…
[ELSE <Выражение>] END
В зависимости от значения переменной (или выражения) выполняется один из блоков WHEN, в котором указано это значение.
Если ни одно из значений не описано в блоках WHEN, то выполняется блок ELSE:
SELECT CASE 3 + 5 WHEN 8 THEN 'Равно 8'
WHEN 7 THEN 'Равно 7' ELSE 'Не смогли определить' END;
/* Выведет: Равно 8 */
Вторая форма:
CASE WHEN <Условие 1> THEN <Выражение 1>
[WHEN <Условие 2> THEN <Выражение 2>]
…
[ELSE <Выражение>] END
Например:
SELECT CASE WHEN 5>6 THEN 'Больше' ELSE 'Меньше' END;
/* Выведет: Меньше */
□ IFNULL(<Выражение1>, <Выражение2>) позволяет заменить значения NULL другими значениями. Если <Выражение1> не равно NULL, то функция возвращает <Выражение1>. В противном случае функция возвращает <Выражение2>:
SELECT IFNULL(5, 3);
/* Выведет: 5 */
SELECT IFNULL(NULL, 3);
/* Выведет: 3 */
□ NULLIF(<Выражение1>, <Выражение2>) — функция для логического выбора. Если <Выражение1> равно <Выражение2>, возвращается значение NULL, в противном случае возвращается <Выражение1>:
SELECT NULLIF(5, 5);
/* Выведет: NULL */
SELECT NULLIF(5, 3);
/* Выведет: 5 */
□ INET_ATON(<IP-адрес>) представляет IP-адрес в виде целого числа:
SELECT INET_ATON('127.0.0.1');
/* Выведет: 2130706433 */
□ INET_NTOA(<IP-адрес в виде числа>) принимает IP-адрес в виде целого числа и возвращает IP-адрес в виде строки, состоящей из четырех цифр, разделенных точкой:
SELECT INET_NTOA(2130706433);
/* Выведет: 127.0.0.1 */
□ GET_LOCK(<Имя>, <Время ожидания ответа сервера>) устанавливает блокировку с указанным именем. Функция возвращает 1 в случае успешной блокировки и 0, если время ожидания ответа сервера превысило величину, заданную в секундах параметром <Время ожидания ответа сервера>. Если произошла ошибка, то функция возвращает NULL. Блокировка снимается тремя способами:
• с помощью функции RELEASE_LOCK();
• при повторном вызове функции GET_LOCK();
• при разрыве соединения с сервером.
Например:
SELECT GET_LOCK('mylock', 5);
/* Выведет: 1 */
□ IS_FREE_LOCK(<Имя блокировки>) проверяет, свободна ли блокировка с указанным именем. Функция возвращает 1, если блокировка свободна, и 0, если она занята:
SELECT IS_FREE_LOCK('mylock');
/* Выведет: 0 */
□ IS_USED_LOCK(<Имя блокировки>) проверяет, установлена ли блокировка с указанным именем. Если блокировка установлена, то возвращается идентификатор соединения клиента, который установил блокировку:
SELECT IS_USED_LOCK('mylock');
/* Выведет: 1 */
SELECT CONNECTION_ID();
/* Выведет: 1 */
Если блокировка не установлена, то возвращается значение NULL;
□ RELEASE_LOCK(<Имя блокировки>) снимает блокировку с указанным именем. Если блокировка успешно снята, то функция возвращает 1. Если блокировка не может быть снята, то возвращается 0. Если блокировка с указанным именем не существует, то функция возвращает NULL:
SELECT RELEASE_LOCK('mylock');
/* Выведет: 1 */
SELECT IS_USED_LOCK('mylock');
/* Выведет: NULL */
□ UUID() возвращает универсальный уникальный идентификатор — 128-разрядное уникальное число в виде строки, состоящее из пяти шестнадцатеричных чисел, разделенных символом "-";
SELECT UUID();
/* Выведет: 9884721ded-2010-2ba9-71be-e337690000 */
SELECT UUID();
/* Выведет: a413be1fed-2010-2ba9-71be-e337690000 */
Используемый алгоритм гарантирует глобальную уникальность возвращенного идентификатора;
□ GROUP_CONCAT() объединяет отдельные значения в одну строку. Функция имеет следующий формат:
GROUP_CONCAT([DISTINCT] <Поле1> [, <ПолеN>]
[ORDER BY <Поле> [ASC | DESC]]
[SEPARATOR <Разделитель>]
)
Для примера создадим таблицу concat_table в базе данных tests.
CREATE TABLE `concat_table` (
`id` INT NOT NULL AUTO_INCREMENT,
`counter` INT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Затем добавим несколько записей:
INSERT INTO `concat_table` VALUES (NULL, 10);
INSERT INTO `concat_table` VALUES (NULL, 20);
INSERT INTO `concat_table` VALUES (NULL, 30);
INSERT INTO `concat_table` VALUES (NULL, 40);
INSERT INTO `concat_table` VALUES (NULL, 20);
Теперь продемонстрируем возможности функции GROUP_CONCAT(). Выведем все значения поля counter:
SELECT GROUP_CONCAT(`counter`) FROM `concat_table`;
/* Выведет: 10,20,30,40,20 */
А теперь выведем только уникальные значения, отсортированные в порядке убывания:
SELECT GROUP_CONCAT(DISTINCT `counter` ORDER BY `counter` DESC)
FROM `concat_table`;
/* Выведет: 40,30,20,10 */
И, наконец, выведем все значения поля counter больше 10 через разделитель "; ":
SELECT GROUP_CONCAT(DISTINCT `counter`
ORDER BY `counter` ASC SEPARATOR '; ')
FROM `concat_table` WHERE `counter` > 10;
/* Выведет: 20; 30; 40 */
Отправитель | Нити |
---|
6 пользователь(ей) активно (1 пользователь(ей) просматривают Инструкции)
Участников: 0 Гостей: 6 далее... |