Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте. Встретил недавно запрос, объяснение работы которого так и не смог найти в интернете.
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)
Неактивен
Представьте, что у Вас есть корзина с яблоками. Ваш запрос в
данной терминологии приблизительно такой:
«Достань из корзины яблоки, которые удовлетворяют:
(размер=средний И наличие_черенка=есть) ИЛИ (цвет=красный
И подожди минутку)». Я расставил скобки так, чтобы были понятны
приоритеты операций.
Вы начинаете доставать яблоки по очереди из корзины и проверять,
удовлетворяют ли они условию. Если яблоко среднее и с черенком,
то оно удовлетворяет уловию, и вторая часть условия не проверяется.
Если же яблоко маленькое или большое, или у него нет черенка, то
мы проверяем второе условие. Если яблоко красное, то мы ждем
минутку. Т.е. мы ждем минутку при доставании каждого красного
яблока без черенка или не среднего размера
Неактивен
Спасибо большое. Кажется понял. Надо получше почитать об условиях в MySQL на досуге, а то вдруг ещё какие сюрпризы всплывут
Неактивен