powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / сложный запрос на выборку
9 сообщений из 9, страница 1 из 1
сложный запрос на выборку
    #39465316
inferno100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Помогите плз набросать динамический запрос, а то я в принципе не могу даже сообразить как его сделать.
В данный момент есть скрипт:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
select
*
from priem
   inner join pocient on (priem.poc_id = pocient.poc_id)
   inner join podrazdelenij on (priem.podr_id = podrazdelenij.podr_id)
   inner join diagnoz_full on (priem.dia_id = diagnoz_full.dia_id)
   inner join diagnoz_mkb on (priem.diamkb_id = diagnoz_mkb.diamkb_id)
   inner join adr_city on (adr_city.adrc_id = pocient.adrc_id)
   inner join adr_street on (adr_street.adrs_id = pocient.adrs_id)
where
 (
   (
     priem.pr_date < :pr_date
     and
     adr_city.adrc_name like :adrc_name
     and
     diagnoz_full.dia_id like :dia_id
    )
  )


Именно часть:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
where
 (
   (
     priem.pr_date < :pr_date // выбрать если дата больше указанной
     and
     adr_city.adrc_name like :adrc_name // в указанном городе
     and
     diagnoz_full.dia_id like :dia_id // с конкретным диагнозом
    )
  )


должна быть динамической, так как предположим, что нужно выбрать конкретный диагноз по всем городам на указанную дату или на оборот
...
Рейтинг: 0 / 0
сложный запрос на выборку
    #39465326
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
inferno100,

самый простой и эффективный вариант - динамически добавлять или не добавлять условия на клиенте.
...
Рейтинг: 0 / 0
сложный запрос на выборку
    #39465354
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
inferno100...
Именно часть:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
where
 (
   (
     priem.pr_date < :pr_date // выбрать если дата больше указанной
     and
     adr_city.adrc_name like :adrc_name // в указанном городе
     and
     diagnoz_full.dia_id like :dia_id // с конкретным диагнозом
    )
  )


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

Добавь для каждой части доп. параметр takeByDate, takeByCity, takeByDiagnosis. Если эта часть условия должна учитываться, то такой параметр должен быть равен 1, если нет - то равен 0.

Код: sql
1.
2.
3.
4.
5.
6.
where
  (:takeByDate = 0 or priem.pr_date < :pr_date) // выбрать если дата больше указанной
     and
  (:takeByCity = 0  or adr_city.adrc_name like :adrc_name) // в указанном городе
     and
  (:takeByDiagnosis =0 or diagnoz_full.dia_id like :dia_id) // с конкретным диагнозом



ЗЫ: учти, что в случае null - значений твоих параметров выборка будет пустой, даже если takeBy* будут равны нулю...
ЗЫЗЫ: можешь чуть переделать, и null - значение твоих параметров использовать как признак "не учитывать"... думай.
...
Рейтинг: 0 / 0
сложный запрос на выборку
    #39465507
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Индексы (а с ними и производительность, когда данных наберется хоть сколько-нибудь значимое кол-во) плачут горючими слезами.

Лучше с "or" не извращаться, а формировать запрос с клиента и пихать только те параметры, что в итоге заданы. Иначе потом придется переделывать, когда кол-во записей перешагнет за несчастную первую сотку тыс записей.
...
Рейтинг: 0 / 0
сложный запрос на выборку
    #39465513
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

Человек хочет "Х" - зачем ему предлагать "Y"?

Опыт должен быть приобретен самостоятельно, иначе какой же это опыт.
...
Рейтинг: 0 / 0
сложный запрос на выборку
    #39465708
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,

Такой рецепт обучения не годится, например, сапёрам.
...
Рейтинг: 0 / 0
сложный запрос на выборку
    #39465737
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
inferno100,
Если надо обязательно в FB формировать динамический запрос (а не на клиенте), то есть оператор "Execute Statement". Не понятно, правда, чем клиент не угодил?
...
Рейтинг: 0 / 0
сложный запрос на выборку
    #39465870
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIЕсли надо обязательно в FB формировать динамический запрос (а не на клиенте), то есть оператор "Execute Statement".у этого подхода куча побочных эффектов, как то: удобство сопровождения, депенденсы не работают, доп. коннект "сам на себя". В общем случае я его стараюсь избегать.

чччДОпыт должен быть приобретен самостоятельно, иначе какой же это опыт.Умные учатся на чужих ошибках, дураки на своих.
...
Рейтинг: 0 / 0
сложный запрос на выборку
    #39465880
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyKreatorXXIЕсли надо обязательно в FB формировать динамический запрос (а не на клиенте), то есть оператор "Execute Statement".у этого подхода куча побочных эффектов, как то: удобство сопровождения, депенденсы не работают...
...
Угу, а в запросе, динамически формируемом на клиенте, "депендесы работают"...

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


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