2012-02-04 9 views
12

En mi base de datos, estoy almacenando un campo llamado "tipo" como tinyInt, ya que no tengo tantos tipos que decidí no crear una tabla para almacenar los nombres correspondientes de todos estos tipos.¿Número entero del mapa (id) a la cadena de texto?

Cuando consulto mi tabla, deseo que los tipos sean reemplazados por sus nombres correspondientes que estoy almacenando en matrices php. Me pregunto si hay una forma de hacer este reemplazo dentro de la declaración SQL en lugar de recorrer los resultados y hacer un reemplazo en la fila de resultados devueltos.

hace algo como esto aún existe:

select *, map(type, {1=>'abc', 2 => 'xyz'}) from orders 

Respuesta

18

La única manera (estoy bastante seguro) para hacerlo es usando un constructo CASE .. WHEN ...:

SELECT *, CASE type WHEN 1 THEN 'abc' WHEN 2 THEN 'xyz' END as stringType 
FROM orders 

También puede utilizar el ELSE cláusula para especificar un valor predeterminado, por ejemplo CASE type WHEN 1 THEN 'abc' WHEN 2 THEN 'xyz' ELSE 'unknown' END.

7

En realidad, en contraste con la respuesta por mathematical.coffee, en realidad es otra manera en MySQL para asignar un número a texto - al menos si sus números son contiguos:

Los ELT() función devuelve el N -ésimo elemento de la lista de cadenas: str1 if N = 1, str2 if N = 2, y así sucesivamente. Devuelve NULL si N es menor que 1 o mayor que la cantidad de argumentos.

Ejemplo:

mysql> SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo'); 
     -> 'ej' 
mysql> SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo'); 
     -> 'foo' 

Fuente:

https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_elt

Cuestiones relacionadas