SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.09.2010 08:45:40

Белый Тигр
Участник
Зарегистрирован: 26.09.2010
Сообщений: 2

Странные конструкции условий

Здравствуйте. Встретил недавно запрос, объяснение работы которого так и не смог найти в интернете.

SELECT fields FROM table WHERE field_1=1 AND field_2=1 AND field_2 = 1 OR 1=1 AND sleep(1)

В процессе изучения этого запроса у меня появилось 2 неясности.
1. Почему sleep(1) срабатывает именно тогда когда условие после OR (1=1) является верным? Раньше мне казалось что такого эффекта можно добиться только с помощью IF()
2. Почему когда условие после OR верно, sleep(1) вызовется столько раз, сколько строк вернёт даный SELECT-запрос?
Второе меня удивляет больше всего. Действительно, если запрос возвращает 1 строку, "засыпание" произойдёт на 1 секунду. Если 5 строк - на 5 секунд.
Подскажите пожалуйста, чем это можно объяснить?

Отредактированно Белый Тигр (26.09.2010 08:45:53)

Неактивен

 

#2 26.09.2010 20:19:50

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Странные конструкции условий

Представьте, что у Вас есть корзина с яблоками. Ваш запрос в
данной терминологии приблизительно такой:
«Достань из корзины яблоки, которые удовлетворяют:
(размер=средний И наличие_черенка=есть) ИЛИ (цвет=красный
И подожди минутку)». Я расставил скобки так, чтобы были понятны
приоритеты операций.

Вы начинаете доставать яблоки по очереди из корзины и проверять,
удовлетворяют ли они условию. Если яблоко среднее и с черенком,
то оно удовлетворяет уловию, и вторая часть условия не проверяется.
Если же яблоко маленькое или большое, или у него нет черенка, то
мы проверяем второе условие. Если яблоко красное, то мы ждем
минутку. Т.е. мы ждем минутку при доставании каждого красного
яблока без черенка или не среднего размера smile

Неактивен

 

#3 26.09.2010 21:31:51

Белый Тигр
Участник
Зарегистрирован: 26.09.2010
Сообщений: 2

Re: Странные конструкции условий

Спасибо большое. Кажется понял. Надо получше почитать об условиях в MySQL на досуге, а то вдруг ещё какие сюрпризы всплывут smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson