Подтвердить что ты не робот

Map integer (id) в текстовую строку?

В моей базе данных я храню поле под названием "type" как tinyInt, так как у меня нет таких типов, я решил не создавать таблицу для хранения соответствующих имен всех этих типов.

Когда я запрашиваю свою таблицу, я хочу, чтобы типы были заменены соответствующими именами, которые я храню в php-массивах. Интересно, есть ли способ сделать эту замену внутри самого оператора sql вместо того, чтобы перебирать результаты и выполнять замену в возвращаемой строке результата.

Есть ли что-то вроде этого:

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

Ответ 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