Map integer (id) в текстовую строку?
В моей базе данных я храню поле под названием "type" как tinyInt, так как у меня нет таких типов, я решил не создавать таблицу для хранения соответствующих имен всех этих типов.
Когда я запрашиваю свою таблицу, я хочу, чтобы типы были заменены соответствующими именами, которые я храню в php-массивах. Интересно, есть ли способ сделать эту замену внутри самого оператора sql вместо того, чтобы перебирать результаты и выполнять замену в возвращаемой строке результата.
Есть ли что-то вроде этого:
select *, map(type, {1=>'abc', 2 => 'xyz'}) from orders
Ответы
Ответ 1
Единственный способ (я уверен) сделать это, используя конструкцию CASE .. WHEN ...
:
SELECT *, CASE type WHEN 1 THEN 'abc' WHEN 2 THEN 'xyz' END as stringType
FROM orders
Вы также можете использовать предложение ELSE
, чтобы указать значение по умолчанию, например. CASE type WHEN 1 THEN 'abc' WHEN 2 THEN 'xyz' ELSE 'unknown' END
.
Ответ 2
На самом деле, в отличие от answer.coffee, в MySQL существует другой способ сопоставления числа с текстом - по крайней мере, если ваши числа смежны:
Функция ELT()
возвращает N-й элемент списка строк: str1
, если N = 1
, str2
, если N = 2
и т.д. Возвращает NULL
, если N меньше 1 или больше числа аргументов.
Пример:
mysql> SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo');
-> 'ej'
mysql> SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo');
-> 'foo'
Источник:
https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_elt