powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Нужно уменьшить кол-во условий для поиска
11 сообщений из 11, страница 1 из 1
Нужно уменьшить кол-во условий для поиска
    #38689374
Добрый день.
Суть вопроса вот в чем. У меня есть 4 поля ввода для поска, Ф., И., О. и таб. номер. Как вы уже поняли, в них вводятся данные, основываясь на которых строится репорт. Что-то типа:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT find_name.ID_tab, 
       sp_rb_fio.fam_u||' '||sp_rb_fio.f_name_u||' '||sp_rb_fio.s_name_u FIO,
       find_name.namcex,
       find_name.minteld,
       find_name.mintel 
FROM qwerty.sp_rb_fio,
     tvsjke.find_name 
WHERE (find_name.ID_TAB = :hidden1 AND find_name.ID_tab = sp_rb_fio.ID_tab)
      OR (sp_rb_fio.fam_u = :hidden3 AND find_name.ID_tab = sp_rb_fio.ID_tab)
      OR (sp_rb_fio.f_name_u = :hidden2 AND find_name.ID_tab = sp_rb_fio.ID_tab)
      OR (sp_rb_fio.s_name_u = :hidden4 AND find_name.ID_tab = sp_rb_fio.ID_tab)



Как видно, здесь поиск идет отдельно по каждому полю. Другие варианты, кроме как добавить все возможные наборы условий типа

Код: plsql
1.
      OR (sp_rb_fio.f_name_u = :hidden2 AND find_name.ID_tab = sp_rb_fio.ID_tab AND find_name.ID_TAB = :hidden1 AND find_name.ID_tab = sp_rb_fio.ID_tab )



в голову не приходят =(

Может, посоветуете что-то ? Не обязательно код, можно просто идею, ссылку на нее, etc.
...
Рейтинг: 0 / 0
Нужно уменьшить кол-во условий для поиска
    #38689381
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ленивый студент,

Что надо-то?
...
Рейтинг: 0 / 0
Нужно уменьшить кол-во условий для поиска
    #38689388
альтернатива кучи записей с условиями, какое-то более лаконичное решение
...
Рейтинг: 0 / 0
Нужно уменьшить кол-во условий для поиска
    #38689392
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ленивый студент,

Конкатенация всех полей с обеих сторон.
...
Рейтинг: 0 / 0
Нужно уменьшить кол-во условий для поиска
    #38689396
вроде понятно, что написано, но в то же время ничего не понятно
...
Рейтинг: 0 / 0
Нужно уменьшить кол-во условий для поиска
    #38689412
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ленивый студент,

Код: sql
1.
where '$'||pole1||'$'||pole2||'$'||pole3||'$' like '$%'||hidden1||'%$%'||hidden2||'%$%'||hidden3||'%$'


Работать будет медленнее, зато всего 1 строка.
...
Рейтинг: 0 / 0
Нужно уменьшить кол-во условий для поиска
    #38689546
tvsjke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gustly,
поменял where на ваш вариант, запустил, прождал загрузки приложения ~3 минут, не дождался, поменял обратно)
...
Рейтинг: 0 / 0
Нужно уменьшить кол-во условий для поиска
    #38689555
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая-то связка непонятная сильно. Сначала должна идти связка, а потом условия поиска. А там не пойми что.
...
Рейтинг: 0 / 0
Нужно уменьшить кол-во условий для поиска
    #38825152
dmitriy.kusin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С операторами в WHERE и соединением определитесь сами (то что в квадратных скобках)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT fn.ID_tab, 
       srf.fam_u || ' ' || srf.f_name_u || ' ' || srf.s_name_u as FIO,
       fn.namcex,
       fn.minteld,
       fn.mintel 
  FROM qwerty.sp_rb_fio srf
  [LEFT] JOIN tvsjke.find_name fn
    ON fn.ID_tab = srf.ID_tab
 WHERE fn.ID_TAB = :hidden1
    OR[AND] srf.fam_u = :hidden3
    OR[AND] srf.f_name_u = :hidden2
    OR[AND] srf.s_name_u = :hidden4
...
Рейтинг: 0 / 0
Нужно уменьшить кол-во условий для поиска
    #38825159
dmitriy.kusin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
здесь лишнее
...
Рейтинг: 0 / 0
Нужно уменьшить кол-во условий для поиска
    #38826062
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запрос конечно нужно писать красиво, но в первую очередь он должен отрабатывать быстро. Даже если запрос будет занимать десятки строк, например Ваш запрос можно переписать так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
with a as (
SELECT find_name.ID_tab b,
		 sp_rb_fio.ID_tab c
       sp_rb_fio.fam_u||' '||sp_rb_fio.f_name_u||' '||sp_rb_fio.s_name_u FIO,
       find_name.namcex,
       find_name.minteld,
       find_name.mintel 
FROM qwerty.sp_rb_fio,
     tvsjke.find_name )
select * from a WHERE (find_name.ID_TAB = :hidden1 AND a.b = a.c)
union all
select * from a WHERE (sp_rb_fio.fam_u = :hidden3  AND a.b = a.c)
union all
select * from a WHERE (sp_rb_fio.f_name_u = :hidden2 AND a.b = a.c)
union all
select * from a WHERE (sp_rb_fio.s_name_u = :hidden4 AND a.b = a.c)


Скорее всего он будет работать быстрее, но стал менее понятным.
Вывод, если скорость устраивает, даже не дергайся.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Нужно уменьшить кол-во условий для поиска
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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