Création d'attributs de produit personnalisables dans un magasin Web: chaque attribut peut avoir un type de données différent, chaque type de données étant stocké dans une colonne distincte utilisant le type de données mysql correspondant.Mysql CASE - WHEN - THEN - renvoi du type de données incorrect (BLOB)
J'ai une question comme:
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 (...)
Maintenant, le problème est que lorsque attribute_types
. type
est égal à? Some-type? Je veux qu'il renvoie une valeur car il est stocké dans product_attribute_values
table. Actuellement, je reçois BLOb à chaque fois. Dois-je utiliser le cast de type ou y a-t-il de la magie derrière la scène que je ne connais pas, OU peut-être y a-t-il une meilleure alternative?
EDIT:
Tout semble bien se passer (prix vérifier im qui est flottant) jusqu'à ce que j'ajouter une condition pour TEXT (textarea).
Une instruction CASE renvoie toujours le même type de données: http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html –
oui merci pour l'avoir signalé. "Le type de retour par défaut d'une expression CASE est le type agrégé compatible de toutes les valeurs de retour, mais dépend également du contexte dans lequel il est utilisé." –