0

Webストアでカスタマイズ可能な製品属性を作成しています-各属性は異なるタイプのデータを持つことができ、各データタイプは対応する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_typestype?some-type?に等しい テーブルに格納されている値を返すようにしproduct_attribute_valuesます。現在、私は毎回BLObを取得しています。

型キャストを使用する必要がありますか、それとも私が知らない舞台裏の魔法があるのでしょうか、それとももっと良い代替手段があるのでしょうか?

編集:

TEXT(textarea)の条件を追加するまで、すべてOKAY(フロートの価格をチェックしています)のようです。

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 に答える