Mysql CASE – WHEN – THEN – возврат неправильного типа данных (blob)

StackOverflow https://stackoverflow.com/questions/2542571

Вопрос

Я создаю настраиваемые атрибуты продукта в интернет-магазине — каждый атрибут может иметь разные типы данных, каждый тип данных хранится в отдельном столбце с использованием соответствующего типа данных 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top