Сегодня столкнулся с такой тонкостью, допустим в одном из полей есть значения числовые, 0 и NULL (при постепенной доработке движка и базы так получилось)
мы делаем запрос
SELECT * FROM `products` WHERE NOT `picture_id`>0
У нас выберет записи, у которых в picture_id 0, но не выберет те, у которых NULL
А теперь чуток поменяем запрос и получаем вот что:
Я поговорил с кодерами на луге и они сказали мне, что выражение не срабатывает, т.к. первое сравнение допустимо только к числовым значениям, если не с чем сравнивать, то даже не станет сравнивать.
Для решения данной проблемы нужно писать
SELECT * FROM `products` WHERE `picture_id`=0 OR `picture_id` IS NULL
Либо значение по умолчанию поставить 0, а потом выполнить запрос
UPDATE `products` SET `picture_id`=0 WHERE `picture_id` IS NULL
мы делаем запрос
SELECT * FROM `products` WHERE NOT `picture_id`>0
У нас выберет записи, у которых в picture_id 0, но не выберет те, у которых NULL
А теперь чуток поменяем запрос и получаем вот что:
Я поговорил с кодерами на луге и они сказали мне, что выражение не срабатывает, т.к. первое сравнение допустимо только к числовым значениям, если не с чем сравнивать, то даже не станет сравнивать.
Для решения данной проблемы нужно писать
SELECT * FROM `products` WHERE `picture_id`=0 OR `picture_id` IS NULL
Либо значение по умолчанию поставить 0, а потом выполнить запрос
UPDATE `products` SET `picture_id`=0 WHERE `picture_id` IS NULL
1 комментарий:
SELECT * FROM `products` WHERE ifnull(`picture_id`,0) = 0
Отправить комментарий