Перевод перечисленных данных в SQL / сопоставленные коды состояния - PullRequest
0 голосов
/ 28 декабря 2011

Я не совсем знал, как озаглавить этот вопрос, трудно описать, что я имею в виду в заголовке.По сути, у меня есть перечисленные коды состояния, и я ищу простой способ сопоставить их с данными в запросе.

Например, допустим, где-то определено следующее.Они находятся вне моего контроля и не находятся в базе данных:

CODE     STATUS
----------------
1      = ACTIVE
2      = SUSPENDED
3      = CLOSED
4      = CANCELED
5      = ETC...

SELECT item_title, status_code FROM mytable WHERE foo='bar';

Целочисленный код хранится в базе данных, но часто бывают случаи, когда это будет полезноесли бы я мог сделать mysql осведомленным о том, что они переводят, особенно для сортировки, но было много других случаев, это было бы полезно.Я знаю, что можно сделать что-то вроде этого:

SELECT item_title,
    IF(status_code=1,'ACTIVE',
        IF(status_code=2,'SUSPENDED',
            IF(status_code=3,'CLOSED',
                IF(status_code=3,'CANCELED', ...)
            )
        )
    ) AS real_status
FROM mytable WHERE foo='bar';

Но это утомительно, некрасиво и подвержено ошибкам, и в некоторых случаях у меня может быть 50 или более кодов, так что обычно это не решение,В идеале, я хотел бы иметь определения кода в таблице, чтобы я мог просто присоединиться к ней, но это не вариант.

Я надеюсь, что есть какая-то функция или метод MySQL, о которых я не знаю, которые могут решитьthis.

Редактировать: Чтобы уточнить, коды состояния не определены в базе данных, они определены в коде.Я могу перевести статусы в коде после запроса, но это не идеально.По сути, я спрашиваю, есть ли способ сделать это в SQL:

SELECT $statushash[tbl.status_code] AS real_status FROM mytable AS tbl...

1 Ответ

2 голосов
/ 28 декабря 2011

Предполагая, что вы не можете создать таблицу поиска, я могу представить две возможности:

1.Создать пользовательскую функцию . Однако ограничения на создание пользовательских функций в MySQL довольно строги.

2.Создайте представление , имитирующее таблицу поиска - что-то вроде этого:

CREATE VIEW v_enum_lookup AS
select 1 as status_code, 'ACTIVE' as status_description UNION ALL
select 2 as status_code, 'SUSPENDED' as status_description UNION ALL
...

(и т.д.).

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