Динамические и фильтрованные списки

Динамические и фильтрованные списки

Предположим, у нас есть база данных с таблицами items, companies и item_companies.

Для статьи о выручке нужно отображать только покупателей, а для статьи о расходах — только поставщиков.

Типичный запрос для получения списка компаний выглядит так:

SELECT id, name FROM companies

Если основной запрос данных содержит параметр @item_id, его можно использовать и для формирования списка значений. Например, SQL-запрос может выглядеть следующим образом:

SELECT c.id, c.name FROM companies c INNER JOIN item_companies ic ON ic.company_id = c.id WHERE ic.item_id = @item_id

Это пример динамического списка значений. Такие списки обновляются при каждом изменении параметров, например, @item_id.

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

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

SELECT c.id, c.name, ic.item_id FROM companies c INNER JOIN item_companies ic ON ic.company_id = c.id

Это пример фильтрованного списка.

В Excel для этого используются динамические формулы, которые автоматически создаёт надстройка SaveToDB. В других продуктах списки значений просто фильтруются по значению третьей колонки.

В некоторых случаях реализация может быть проще с использованием таблиц или представлений. Например, таблица states содержит колонки: id, country_id, state.

Если основной запрос данных содержит параметр @country_id, можно задать запрос из таблицы в поле HANDLER_CODE следующим образом:

id, +state, @country_id

Этот код преобразуется в следующий запрос:

SELECT id, state FROM states WHERE country_id = @country_id ORDER BY state

Для создания фильтрованного списка значений достаточно указать три колонки в поле HANDLER_CODE (где country_id должна быть третьей):

id, state, country_id

Этот запрос преобразуется в простой SELECT:

SELECT id, state, country_id FROM states

Для фильтрованных списков параметры сортировки + и - можно не использовать, так как списки сортируются автоматически.

Этот веб-сайт использует куки. Продолжая использовать веб-сайт, Вы принимаете условия Политики защиты персональных данных.