Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 Порядок полей при выборке  [new]
Sashaua
Member

Откуда: Kiev
Сообщений: 182
Всем привет, возможно глупость буду спрашивать...
Есть таблица моделей
IDNAME_MODELCODE_MODELUNIT_MODELBARCODE_MODELи еще несколько полей

В 95 случаев модели выбираються в виде
select CODE_MODEL||NAME_MODEL,..... from MODELS  

Захотели хотелку чтобы можно было менять порядок полей при выборе моделей, и это было настройкой.
Например:
select CODE_MODEL||NAME_MODEL,..... from MODELS  

или
select NAME_MODEL||CODE_MODEL,..... from MODELS  

или
select NAME_MODEL||BARCODE_MODEL,..... from MODELS  

Вопрос как можно сделать это легантно не плодив кучу ifоф. Например через таблицу настроек или как то еще. Как такой вопрос решают по правильному?
Заранее спасибо.
21 июн 20, 23:47    [22154818]     Ответить | Цитировать Сообщить модератору
 Re: Порядок полей при выборке  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4214
Sashaua
не плодив кучу ifоф.
Кнопку "Сделать всё хорошо"?
На клиенте, через настройку, используемую в ифах.
22 июн 20, 00:12    [22154828]     Ответить | Цитировать Сообщить модератору
 Re: Порядок полей при выборке  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28878
YuRock,

в исходном сообщении почему-то все вытаскивается в один столбец, конкатенацией.
И я х.з., как потом приложение будет разбирать, в каком порядке какие стольбцы идут.
Поэтому да,
- конкатенацию отменить
- крутить порядок столбцов в гриде на клиенте. И там же сохранять.
22 июн 20, 00:19    [22154829]     Ответить | Цитировать Сообщить модератору
 Re: Порядок полей при выборке  [new]
Sashaua
Member

Откуда: Kiev
Сообщений: 182
kdv,
В базе это два разных поля NAME_MODEL и CODE_MODEL
На клиенте это действительно в один столбец конкатенацией (так было в ТЗ)
22 июн 20, 00:31    [22154831]     Ответить | Цитировать Сообщить модератору
 Re: Порядок полей при выборке  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50343

Sashaua
На клиенте это действительно в один столбец конкатенацией (так было в ТЗ)

Так ты определись: конкатенация у тебя на сервере или на клиенте. В первом сообщении она
таки на сервере.

Posted via ActualForum NNTP Server 1.5

22 июн 20, 00:44    [22154834]     Ответить | Цитировать Сообщить модератору
 Re: Порядок полей при выборке  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1588
Если варианты склейки жестко привязаны к конкретным записям MODELS то можно подумать над таким вариантом:
- в MODELS добавить поле FULL_NAME
- заполнять триггером на основании типа записи (если таковые возможно выделить, конечно)

Ну и соответственно, выбираешь всегда FULL_NAME но для разных MODELS оно может быть собрано по разному.

Минусы
- избыточность данных на сервере
- следить за обновлением FULL_NAME если именились составляющие его части

Плюсы
- не нужно морочиться с запросом, он всегда одинаковый
- если нужно поискать в FULL_NAME - то пожалуйста, не нужно выяснять что и как склеено
- FULL_NAME может быть проиндексировано (если не слишком большое), что может ускорить какие-то запросы (но, естественно, может и замедлить)
22 июн 20, 03:42    [22154859]     Ответить | Цитировать Сообщить модератору
 Re: Порядок полей при выборке  [new]
Tonal
Member

Откуда: Новосибирск
Сообщений: 187
Возможных вариантов - вагон. :)
Ежели порядок склейки зависит от данных - можно изобразить сложный запрос, который это учтёт или предгенерить склеенное значение - см ответ 22154859 от fraks.
Ежели клиенты хотят видеть какие-то фиксированные варианты - можно на клиенте или сделать или по запросу на вариант или генерить поля со склейкой и в запрос вписывать.
Так же можно в запросе вернуть все исходные поля, а на клиенте склеивать указанные отдельным местом перед показом.
Как оно будет проще/изящнее в программе - зависит от остального дизайна системы, ну и выбора разработчика. :)
23 июн 20, 13:39    [22155952]     Ответить | Цитировать Сообщить модератору
 Re: Порядок полей при выборке  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8569
Tonal
Возможных вариантов - вагон. :)
А как же самый очевидный? Написать обертку в виде хранимки GET_MODEL_NAME(id, тут_пачка_необязательных_настроечных_параметров) и все иф-ы спрятать в ней
select g.*, m.* from MODELS m LEFT JOIN GET_MADEL_NAME(m.id,0,1,1,1,0,0,null, ...) g on 1=1
24 июн 20, 13:42    [22156515]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить