powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / фильтры в tabular form
23 сообщений из 23, страница 1 из 1
фильтры в tabular form
    #38113296
toor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть бд из примерно 20000 строк, в ней около 25 столбцов. Необходимо:
- на этой же странице править эти строки;
- организовать поиск по нескольким (не менее 10-ти) фильтрам за раз.
Если бы был обыкновенный report, то там поиск с фильтрами идет автоматически, что очень удобно, но нужна tabular form. Для неё добавила строку поиска. Как сделать поиск по одному критерию - понятно (легко получается через select... from... where...or), а вот как добавить несколько фильтров... Очень бы хотелось, чтобы это было похоже на поиск с фильтрами в обыкновенном репорте.
Подскажите, пожалуйста, как это можно осуществить.
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38114072
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toorа вот как добавить несколько фильтров...

Аналогично: поле для ввода/выбора фильтра, фильтрация по этому полю в запросе.
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38117266
toor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавила поле для фильтра с LOV, в нём при зажатии Ctrl можно выбрать несколько полей. Каким должен быть запрос в Region Source, чтобы при выборе нескольких пунктов в фильтре при написании запроса в строке поиска этот самый поиск выполнялся по нажатию кнопки поиска?
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38117298
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toor,

Код: plsql
1.
2.
3.
4.
5.
select ...
  from ...
 where ...
   and (instr(:P_FILTER, ':'||table.column||':') <> 0 or :P_FILTER is null)
/* and (:P_FILTER like '%:'||table.column||':%' or :P_FILTER is null) */



Чтобы было понятнее, можете посмотреть, какое значение в PL/SQL принимает поле-фильтр, когда в нём выбрано несколько значений: сабмит кнопкой, потом Session на панели разработчика в низу страницы.
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38118929
toor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что, если сделать чекбоксы в шапках таблицы? Тогда в зависимости от наличия галочки в чекбоксах по выбранным столбцам и фильтровать, написав соответствующий запрос. В Tabular Form ведь такое можно сделать?
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38135630
toor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста, как добавить чекбоксы только в название каждого столбца (не на каждой строке)? Но при этом подразумевать, что при нажатии на чекбокс поиск будет вестись по всему столбцу.
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38143103
toor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищи! Очень надо! Помогите, пожалуйста, с данным вопросом. Как сделать чекбоксы только в название каждого столбца?
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38143117
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поиск рулит, я когда то тоже задавался этим вопросам!
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38145431
toor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kasik, в том-то и дело, что форма табулированная, и поиска по умолчанию нет. Если бы было, как в интерактивном репорте, было бы счастье. Не подскажите, как сделать поиск с фильтрами по колонкам-столбцам в виде чекбоксов (всё, как выше описано)?
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38145503
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toorkasik, в том-то и дело, что форма табулированная, и поиска по умолчанию нет. Если бы было, как в интерактивном репорте, было бы счастье. Не подскажите, как сделать поиск с фильтрами по колонкам-столбцам в виде чекбоксов (всё, как выше описано)?Сделайте лучше как suPPLer сказал...
Код: plsql
1.
2.
3.
4.
5.
select *
  from mytable
 where (col1 = :P_FILTER1 or :P_FILTER1 is null)
    or (col2 = :P_FILTER2 or :P_FILTER2 is null)
    or (col3 = :P_FILTER3 or :P_FILTER3 is null)

Такой запрос будет фильтроваться только по тем фильтрам, в которые введено значение.
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38156665
toor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите ещё, пожалуйста, как сделать, чтобы каждый последующий фильтр отфильтровывал в найденном? Т.е. ввели значение в один фильтр - выдало сколько-то строк. Потом вводим значение в другой фильтр, и поиск производится в уже найденном и т.д.
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38156668
toor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если одновременно вводить значения в несколько фильтров:
select *
from mytable
where (col1 = :P_FILTER1 or :P_FILTER1 is null)
or (col2 = :P_FILTER2 or :P_FILTER2 is null)
or (col3 = :P_FILTER3 or :P_FILTER3 is null)

, на выходе получаем не один единственный результат, удовлетворяющий всем фильтрам, а все возможные варианты, и они не пересекаются. Как это исправить?
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38156748
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toorЕсли одновременно вводить значения в несколько фильтров:
select *
from mytable
where (col1 = :P_FILTER1 or :P_FILTER1 is null)
and (col2 = :P_FILTER2 or :P_FILTER2 is null)
and (col3 = :P_FILTER3 or :P_FILTER3 is null)

, на выходе получаем не один единственный результат, удовлетворяющий всем фильтрам, а все возможные варианты, и они не пересекаются. Как это исправить?OR на AND заменить, вестимо... Извините, что в заблуждение ввел - опечатку сделал, но ведь suPPLer еще в третьем посте сверху все правильно написал - через AND...
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38157446
toor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но ведь в случае AND, если один из полей фильтров останется пустым, поиск выдаст нулевой результат. Вполне возможен вариант, что известны не все искомые поля. Как тогда быть?
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38157541
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toorНо ведь в случае AND, если один из полей фильтров останется пустым, поиск выдаст нулевой результат. Вполне возможен вариант, что известны не все искомые поля. Как тогда быть?Еще раз внимательно вглядитесь в то, что написано в секции WHERE, и вы поймете, что ошибаетесь:
Код: plsql
1.
2.
3.
4.
5.
select *
  from mytable
 where (col1 = :P_FILTER1 or :P_FILTER1 is null)
   and (col2 = :P_FILTER2 or :P_FILTER2 is null)
   and (col3 = :P_FILTER3 or :P_FILTER3 is null)

Например, у вас - col1, col2 и col3 - это поля "ФИО". В поле P_FILTER1 вы ввели "Иванов", а остальные ва оставили пустыми. Какой будет результат?
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38157867
toor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы правы... Спасибо Вам большое!

У меня ещё один вопрос: в SQl Commands всё хорошо запускается, ищет (ещё раз спасибо!), а когда перехожу на страницу репорта и там пытаюсь ввести значения в поля поиска, но не первого, а , скажем, второго поля, при сабмите пишет, что необходимо обязательно ввести значение в первое поле. С чем я напутала? Почему апекс ругается только на первое поле? А со всеми остальными, если они пустые, всё в порядке?
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38157887
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toorС чем я напутала?

0. Edit Page Item->User Interface->Template=Required [with help]?
1. Edit Page Item->Settings->Value Required=Yes?
2. Computations?

PS: Пожалуйста, для разных вопросов создавайте разные темы. Не надо делать из темы свалку с кучей вопросов.
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38170439
toor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возник ещё один вопрос по теме: если при поиске не вводить значения в фильтрах, а сделать в некоторых фильтрах выпадающие списки, как изменится запрос, чтобы по выбранному значению из списка осуществлялся поиск?
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38170474
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toorВозник ещё один вопрос по теме: если при поиске не вводить значения в фильтрах, а сделать в некоторых фильтрах выпадающие списки, как изменится запрос, чтобы по выбранному значению из списка осуществлялся поиск?Никак, ну или почти никак не изменится.
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38170539
toor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если никак запрос не менять, то никак и не ищет.
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38170564
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toorЕсли никак запрос не менять, то никак и не ищет.Ну потому что вы нам ничего не говорите...
Что за выпадающие списки? Статические или динамические? Если динамические, какой там запрос? У вас есть справочная таблица - источник списка значений (LOV), и основная, связанная с ней по внешнему ключу? Или что-то другое? Как работало раньше, до перехода на Select List? Выкладывайте все, как врачам на медосмотре...
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38170651
toor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итак, доктор, рассказываю:

было, как мне здесь и посоветовали:

select *
from mytable
where (col1 = :P_FILTER1 or :P_FILTER1 is null)
and (col2 = :P_FILTER2 or :P_FILTER2 is null)
and (col3 = :P_FILTER3 or :P_FILTER3 is null)

Всё отлично ищется, если забивать значения в фильтры ручками.

Для фильтра по дате изначально был аналогичный запрос, но понадобилось фильтровать за какой-то определенный период, и запрос поменялся на:

and (mydate between :P_DATE1 and :P_DATE2 or :P_DATE1 is null or :P_DATE2 is null)

После этого фильтровать по конкретной дате, а не за период, не выходит.

Также для нескольких полей-фильтров есть определенные параметры, по которым надо фильтровать. Для этих параметров есть справочные таблицы, которые я и вставляю в поля-фильтры (Display as Select List). Поиск, если в фильтре выбрать какой-нибудь объект из списка, по данному параметру не идет, no data found.

А хотелось бы ещё сделать так, чтобы можно было в одном фильтре выбирать одновременно несколько значений из LOV и одновременно по этим выбранным значениям осуществлять поиск.
...
Рейтинг: 0 / 0
фильтры в tabular form
    #38170714
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
toorДля фильтра по дате изначально был аналогичный запрос, но понадобилось фильтровать за какой-то определенный период, и запрос поменялся на:

and (mydate between :P_DATE1 and :P_DATE2 or :P_DATE1 is null or :P_DATE2 is null)

После этого фильтровать по конкретной дате, а не за период, не выходит.И не должно выходить. У вас в запросе - between, то есть "больше одной и меньше другой". Если надо выбрать именно конкретную дату, то надо как-то указать, что ищете именно по конкретной дате. Указать надо, во-первых, пользователю, чтобы он знал, куда что вводить, а во-вторых, указать в запросе, где использовать равенство, а где - неравенство.

Для начала, попробуйте так. Для диапазона:
Код: plsql
1.
2.
 and (mydate >= :P_DATE1 or :P_DATE1 is null)
 and (mydate <= :P_DATE2 or :P_DATE2 is null)


Если mydate содержит дату и время, то имеет смысл написать
Код: plsql
1.
2.
 and (mydate >= :P_DATE1 or :P_DATE1 is null)
 and (mydate <= :P_DATE2 + 1 or :P_DATE2 is null)



Для конкретной даты. Например, есть поле P_DATE3 для выбора одной конкретной даты, тогда так:
Код: plsql
1.
2.
3.
 and (mydate >= :P_DATE1 or :P_DATE1 is null)
 and (mydate <= :P_DATE2 + 1 or :P_DATE2 is null)
 and (mydate = :P_DATE3 or :P_DATE3 is null)



toorТакже для нескольких полей-фильтров есть определенные параметры, по которым надо фильтровать. Для этих параметров есть справочные таблицы, которые я и вставляю в поля-фильтры (Display as Select List). Поиск, если в фильтре выбрать какой-нибудь объект из списка, по данному параметру не идет, no data found.
Таблицы
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
create table departments(
id number,
dep_name varchar2(100));

create table users(
id number, 
user_name varchar2(100),
dep_id number references departments(id));


Запрос в Select List (источник LOV) с названием P1_DEP:
Код: plsql
1.
2.
select dep_name, id
from departments


Запрос для Tabular Form
Код: plsql
1.
2.
3.
select *
from users
where dep_id = :P1_DEP or :P1_DEP is null

Если в выпадающем списке ничего не выбрано, Tabular Form покажет всех пользователей. Если выбран департамент - покажет всех пользователей из этого департамента. Если бы вы написали названия своих полей и таблиц, я бы вам с ними пример привел.

toorА хотелось бы ещё сделать так, чтобы можно было в одном фильтре выбирать одновременно несколько значений из LOV и одновременно по этим выбранным значениям осуществлять поиск.Теоретически, Select List содержит опцию "выделять несколько строк". Как это работает на практике - не знаю пока.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / фильтры в tabular form
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]