Как выбрать значения из массива и вернуть вместо случая в mysql?

У меня есть запрос mysql, в котором я использую Case для замены имени столбца.

SELECT *,
  (CASE
      WHEN cp.client_type = 1 THEN 'AB'
      WHEN cp.client_type = 2 THEN 'BX'
      WHEN cp.client_type = 3 THEN 'PC'
      WHEN cp.client_type = 4 THEN 'DD'
      WHEN cp.client_type = 5 THEN 'DE'
  END) AS client_type 
  FROM clients as cp

Проблема в том, чтобы иметь 20 таких случаев, и я не хочу использовать 20 при условиях в запросе.

Есть ли способ использовать что-то вроде

SELECT *,
choose_from(Array("AB","BX","PC","DD","DE"), cp.client_type) as client_type from 
clients as cp

Последовательны ли ваши типы? Ваши коды всегда состоят из двух букв?

Caius Jard 15.12.2018 13:58

да типы являются последовательными и могут быть сопоставлены с ключами

Masade 15.12.2018 14:00

Значение можно сочетать с ключами ?.

forpas 15.12.2018 14:03

Я имею в виду ключи (индексы) массива, 1 => «AB», 2 => «BX»

Masade 15.12.2018 14:49
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
4
32
1

Ответы 1

Правильное решение - иметь таблицу clientTypes и использовать JOIN:

SELECT cp.*, cp.client_type_name
FROM clients cp LEFT JOIN
     client_types ct
     ON cp.client_type = ct.client_type;

Если у вас его нет, создайте!

create table client_types (
    client_type_id int primary key,
    client_type_name varchar(255)
);

insert into client_types (client_type_id, client_type_name)
    values (1, 'AB'), (2, 'BX'), . . . ;

Если по какой-то причине у вас есть отвращение к этому, вы можете использовать функцию elt():

SELECT cp.*,
       ELT(client_type, 'AB', 'BX', 'PC', 'DD', 'DE') as client_type 
FROM clients cp;

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

Думаю, таблицы client_type нет!

Adem Öztaş 15.12.2018 13:58

Да, и Гордон говорит о том, что должен должен быть

Caius Jard 15.12.2018 14:00

Другие вопросы по теме