- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
@$maxday=mysql_result(mysql_query("
select max(`day`) from `hours`
where `login` in (
select `login` from people
where `type`='1' and `show`='yes')
and `begin`='10:00'
and `end`='18:00'
and `login`!='roma'"),0);
Дела, дела, дела.
Рома извини, но у меня самолёт.
Пока, пока, пока.
Рома рома роман, роман,
Цеель всеей моей жиизниии.
Но речь о последней строке:
Этакий захардкоженный банлист %)
А ничего оно и не стоит, ибо оптимизатор запросов умнее всех и ядру БД отправятся одинаковые планы, что с джоином, что с ином. Вот так-то...
Ну Рома, это да... лоханулись разработчики БД. Можно же добавить флаг в таблицу - IsRoma.
Или, если база позволит, запилить вьюху hours_without_roma, в которой записи с ромой вырезаются.
Точных причин и кода я уже не помню, но вот кулстори. Однажды я перешёл с Нормальной БД™ на mysql. По старой привычке, приобретённой на НБД™, я написал запрос с подзапросом в секции where, где выбирал максимальное (кажется) значение по неким данным из основного запроса. Искренне полагая, что внутрь подзапроса перейдёт немножечко данных из основного запроса. Собсна, в НБД™ я так и делал время от времени. В mysql, как оказалось, всё немного иначе. Оно сначала пытается выбрать данные подзапроса (миллионы), потом хитро умножить на данные основного запроса, найти максимальное и только потом пересечь. Этот запрос работал пару дней, пока в таблице подзапроса не накопилось достаточно данных, отчего сервер mysql сошёл с ума, начал есть травуповесил систему примерно на 101% загрузки. Благодаря инженерному подходу и смекалке, я переписал запрос как надо, попутно оптимизировав. Сам дурак? Понадеялся по привычке зря? Но осадочек-то остался.
А морали сегодня не будет, нет.
> from people where `type`='1'
у хирургов все люди делятся на один тип?