Всем доброго дня!
В наследство достался сайт магазин с 80 этажным генератором отчетов через cron + shell script.
Сейчас заметили что по некоторым товарам генерятся некорректные данные, в частности для поля состав возвращается NULL, хотя по факту поле заполнено.
Начал смотреть и вижу что содержимое генерится запросом
SELECT IF(
!(SELECT pa.text FROM oc_product_attribute pa WHERE pa.product_id = 19442 AND pa.attribute_id = '35'),
(SELECT pa.text FROM oc_product_attribute pa WHERE pa.product_id = 19442 AND pa.attribute_id = '35'),
'NULL'
)
При этом запрос
SELECT pa.text FROM oc_product_attribute pa WHERE pa.product_id = 19442 AND pa.attribute_id = '35'
Возвращает корректное значение -
100% полиэстер
Если убрать
!
IF(
(SELECT pa.text FROM oc_product_attribute pa WHERE pa.product_id = 19442 AND pa.attribute_id = '35'),
(SELECT pa.text FROM oc_product_attribute pa WHERE pa.product_id = 19442 AND pa.attribute_id = '35'),
'NULL'
)
тоже возвращает корректное значение.
Всё бы ничего, но для некоторых товаров возвращается корректное значение...
SELECT IF(
!(SELECT pa.text FROM oc_product_attribute pa WHERE pa.product_id = 24074 AND pa.attribute_id = '35'),
(SELECT pa.text FROM oc_product_attribute pa WHERE pa.product_id = 24074 AND pa.attribute_id = '35'),
'NULL'
)
Возвращает -
Текстиль
При этом упрощенный запрос
SELECT pa.text FROM oc_product_attribute pa WHERE pa.product_id = 24074 AND pa.attribute_id = '35'
ничего не возвращает...
Как это вообще понимать?
UPDATE
Кое что проясняется.
Запрос
SELECT IF(
!(SELECT pa.text FROM oc_product_attribute pa WHERE pa.product_id = 19442 AND pa.attribute_id = '35'),
(SELECT pa.text FROM oc_product_attribute pa WHERE pa.product_id = 19442 AND pa.attribute_id = '35'),
'NULL'
)
Возвращает NULL вместо
100% полиэстер (Шерсть в изначальном вопросе попала туда от другого товара).
Но, phpMyadmin пишет
Warning: #1292 Truncated incorrect DOUBLE value: '100% полиэстер'
Структура таблицы oc_product_attribute -
https://s.mail.ru/96sf/scGaYa4Af
Что-то я не понял при чем тут DOUBLE...