Mysql CASE – WHEN – THEN – возврат неправильного типа данных (blob)
-
23-09-2019 - |
Вопрос
Я создаю настраиваемые атрибуты продукта в интернет-магазине — каждый атрибут может иметь разные типы данных, каждый тип данных хранится в отдельном столбце с использованием соответствующего типа данных MySQL.
У меня есть запрос типа:
SELECT
products.id AS id,
products.sku AS sku,
products.name AS name,
products.url_key AS url_key,
attributes.name AS attribute,
CASE
WHEN `attribute_types`.`type` = 'text'
THEN product_attribute_values.value_text
WHEN `attribute_types`.`type` = 'float'
THEN product_attribute_values.value_float
WHEN `attribute_types`.`type` = 'price'
THEN product_attribute_values.value_float
WHEN `attribute_types`.`type` = 'integer'
THEN product_attribute_values.value_integer
WHEN `attribute_types`.`type` = 'multiple'
THEN product_attribute_values.value_text
WHEN `attribute_types`.`type` = 'dropdown'
THEN product_attribute_values.value_text
WHEN `attribute_types`.`type` = 'date'
THEN product_attribute_values.value_date
WHEN `attribute_types`.`type` = 'textarea'
THEN product_attribute_values.value_textarea
END as value
from (...)
Теперь проблема в том, что когда attribute_types
.type
равно ?some-type?я хочу, чтобы он возвращал значение в том виде, в каком оно хранится в product_attribute_values
стол.В настоящее время я получаю BLOB каждый раз.
Должен ли я использовать приведение типов или есть какая-то закулисная магия, о которой я не знаю, ИЛИ, может быть, есть какая-то лучшая альтернатива?
РЕДАКТИРОВАТЬ:
Кажется, все в порядке (я проверяю плавающую цену), пока я не добавляю условие для ТЕКСТА (текстовое поле).
Нет правильного решения
Другие советы
Кажется, вы используете какой-то браузер запросов.Попробуйте выполнить эту команду через Putty.
Кроме того, чтобы получить правильный вывод даже в браузере запросов, включите функцию CAST в свой оператор CASE, как показано ниже.
CAST(
CASE
WHEN `attribute_types`.`type` = 'text'
THEN product_attribute_values.value_text
WHEN `attribute_types`.`type` = 'float'
THEN product_attribute_values.value_float
WHEN `attribute_types`.`type` = 'price'
THEN product_attribute_values.value_float
WHEN `attribute_types`.`type` = 'integer'
THEN product_attribute_values.value_integer
WHEN `attribute_types`.`type` = 'multiple'
THEN product_attribute_values.value_text
WHEN `attribute_types`.`type` = 'dropdown'
THEN product_attribute_values.value_text
WHEN `attribute_types`.`type` = 'date'
THEN product_attribute_values.value_date
WHEN `attribute_types`.`type` = 'textarea'
THEN product_attribute_values.value_textarea
END
AS CHAR) as value