Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Нужно уменьшить кол-во условий для поиска / 11 сообщений из 11, страница 1 из 1
07.07.2014, 13:28
    #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
07.07.2014, 13:33
    #38689381
Gustly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно уменьшить кол-во условий для поиска
Ленивый студент,

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

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

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


Работать будет медленнее, зато всего 1 строка.
...
Рейтинг: 0 / 0
07.07.2014, 15:39
    #38689546
tvsjke
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно уменьшить кол-во условий для поиска
Gustly,
поменял where на ваш вариант, запустил, прождал загрузки приложения ~3 минут, не дождался, поменял обратно)
...
Рейтинг: 0 / 0
07.07.2014, 15:42
    #38689555
Gustly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно уменьшить кол-во условий для поиска
Какая-то связка непонятная сильно. Сначала должна идти связка, а потом условия поиска. А там не пойми что.
...
Рейтинг: 0 / 0
04.12.2014, 16:42
    #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
04.12.2014, 16:45
    #38825159
dmitriy.kusin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно уменьшить кол-во условий для поиска
здесь лишнее
...
Рейтинг: 0 / 0
05.12.2014, 12:30
    #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
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Нужно уменьшить кол-во условий для поиска / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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