- 1
- 2
- 3
WHERE (p.city_id = 1)
AND ((COALESCE(b.banket_persons,0)=0) OR (b.banket_persons>=20 AND b.banket_persons<=30))
AND ((COALESCE(b.banket_per_person,0)=0) OR (b.banket_per_person>=500 AND b.banket_per_person<=1000))
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−863
WHERE (p.city_id = 1)
AND ((COALESCE(b.banket_persons,0)=0) OR (b.banket_persons>=20 AND b.banket_persons<=30))
AND ((COALESCE(b.banket_per_person,0)=0) OR (b.banket_per_person>=500 AND b.banket_per_person<=1000))
упорный программер явно не подозревал о существовании "is null" и "between"
Dummy00001 24.03.2011 19:20 # +2
прошу заметить, что `COALESCE(b.banket_persons,0)=0` будет TRUE также когда `b.banket_persons=0`, а не только тогда когда `b.banket_persons is null`
ну а between это да. есть народ которому between просто не нравится. и т.к. он есть синтаксические подсластитель, то имо его неиспользование не так уж и страшно.
Seth 25.03.2011 17:38 # 0
SadKo 28.03.2011 14:32 # 0
guest 05.04.2011 11:27 # 0
В процедуре был запрос с between, после 3 лет без проблемной работы процедура стала выполнятся 30 секунд (between перестал использовать индекс)
после того как запрос был исправлен на <=, >= индекс стал использоватся.
guest 11.04.2011 11:43 # 0
Нормальный код, если нужно считать, что значение по умолчанию - 0.
is null тут вообще не в тему. Единственная проблема - с индексами, но это уже зависит от распределения данных в БД, так на вскидку сказать нельзя, требуется ему оптимизация или нет. Нормальный код, в целом.