2016-12-16 2 views
-1

Я пытаюсь заменить столбец в результате запроса на выбор, как показано в This reference, но в отличие от примера у меня много столбцов в таблице, поэтому я не могу указать имя каждого столбца в запросе выбора.Заменить конкретные данные столбца в выбранном запросе?

Я пробовал некоторые способы достичь того же, но никто не кажется эффективным.

select 
    *, (REPLACE(REPLACE(role_id,1,"admin"),2,"moderator") AS role_id 
from user; 

или

Select * 
from user 
where role_id = (select REPLACE(role_id,1,"admin") as role_id from user; 

Здесь мы предполагаем, только два возможного значение для ROLE_ID однако в определенном инстансе, что, возможно, придется получить данные из другой таблицы т.е. другой таблицы, которая содержит различные идентификаторы и значение, соответствующее их.

Так есть способ достижения следующих условий в одном запросе: -

  • заменить значения некоторых полей возвращаются из запроса на выборку (предполагая, что много столбцов писать имена всех столбцов в отдельности не возможно)
  • , чтобы получить значения замещения из разных таблиц для разных столбцов в одной таблице.

Мне нужно реализовать вышеуказанные условия в одном запросе, но изменения не должны быть в базе данных, только результат оптимизации запроса должен быть оптимизирован.

Уже упоминалось следующее, но не могло помочь.

Я использую PHPMyAdmin как двигатель и PHP в качестве языка реализации.

ответ

1

Если я правильно понял ваш вопрос, что проще использовать CASE/КОГДА

SELECT *, 
CASE WHEN role_id = 1 THEN "admin" WHEN role_id = 2 THEN "moderator" END AS role_id 
FROM user; 

Но еще проще, может иметь массив в PHP,

$roles = array("1" => "admin", "2" => "moderator", ....); 

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

+0

спасибо за помощь, я попробовал кейс/когда тоже, но поскольку мне нужно слишком быстро извлекать данные замены из разных таблиц, это не очень помогает, также проблема с внедрением массива php заключается в том, что из-за использования результата на многих платформах мне нужно оптимизировать sql-запрос itlself, – OshoParth

+1

Я ответил на вопрос, основываясь на информации, которую вы предоставили. – e4c5

+1

Наиболее оптимальным решением является создание массива php, поскольку это не создает каких-либо ограничений для базы данных. Но объединение в таблицу, которая содержит роли, будет одинаково эффективной, если таблицы будут проиндексированы. – e4c5