Сопоставить целое число (id) с текстовой строкой? - PullRequest
16 голосов
/ 04 февраля 2012

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

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

Ответы [ 2 ]

21 голосов
/ 04 февраля 2012

Единственный способ (я вполне уверен) сделать это - использовать конструкцию 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.

12 голосов
/ 11 августа 2015

На самом деле, в отличие от ответа математического.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'

* Источник: 1025 *

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...