0

我在网上商店创建可定制的产品属性 - 每个属性可以有不同类型的数据,每个数据类型都使用相应的 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等于?某种类型?我希望它返回一个值,因为它存储在product_attribute_values表中。目前我每次都得到 BLOb。

我应该使用类型转换还是有一些我不知道的幕后魔法,或者也许有更好的选择?

编辑:

一切似乎都还好(我正在检查浮动价格),直到我为 TEXT(textarea)添加条件。

4

1 回答 1

0

看来您正在使用一些查询浏览器。尝试通过“Putty”执行此命令。

此外,即使在查询浏览器中也能获得正确的输出,请像这样在 CASE 语句中包含 CAST 函数。

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
于 2013-09-20T06:12:00.057 回答