Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по фильтрации 
V
    Опции темы
lynx13
Дата 22.2.2010, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Доброе утро!!!

Есть запрос вида:

Select f1, f2,...fn from tab1, tab2..
where ....
and....
.........
union all
Select f1, f2,...fn from tab3, tab2..
where ....
and....
.........
union all
Select f1, f2,...fn from tab4, tab2..
where ....
and....
.........

В программе нужно ввести параметры поиска, например по дате, а за тем передать результат в таблицу..
Как для такого запроса использовать фильтр, чтобы поиск осуществлялся по всем трем частям запоса???

Спасибо!
PM MAIL   Вверх
pseud
Дата 22.2.2010, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



СУБД?

Добавлено через 35 секунд
Используемые компонеты доступа к БД?


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
lynx13
Дата 22.2.2010, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



oracle, OraQuery , DataSource
PM MAIL   Вверх
pseud
Дата 22.2.2010, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(lynx13 @  22.2.2010,  10:52 Найти цитируемый пост)
 а за тем передать результат в таблицу..

в реальную таблицу базы данных?

Добавлено через 2 минуты
фильтровать по дате обязательно после выполнения запроса?
или можно прямо в запросе?


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
lynx13
Дата 22.2.2010, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Цитата(pseud @  22.2.2010,  12:22 Найти цитируемый пост)
в реальную таблицу базы данных?

Цитата

Нет отобразить в таблице программы..

Цитата(pseud @  22.2.2010,  12:22 Найти цитируемый пост)
фильтровать по дате обязательно после выполнения запроса?
или можно прямо в запросе? 

Нет запрос выполняется, когда ввели условия поиска


PM MAIL   Вверх
pseud
Дата 22.2.2010, 12:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Есть ли проблема в реализации такой логики?
Код

Select f1, f2,...fn from tab1, tab2..
where ....
and....
and tab777.date = :p_date1
.........
union all
Select f1, f2,...fn from tab3, tab2..
where ....
and....
and tab777.date = :p_date2
.........
union all
Select f1, f2,...fn from tab4, tab2..
where ....
and....
and tab777.date = :p_date3
.........

Код

for i := 1 to n do
  OraQuery.ParamByName('p_date' + IntToStr(i)).AsDate := DateTimePicker1.Date;



--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
lynx13
Дата 22.2.2010, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Цитата(pseud @  22.2.2010,  12:37 Найти цитируемый пост)
Есть ли проблема в реализации такой логики?

С этим понятно, что по идее нужно в каждую часть встявлять строку and tab777.date = :p_date3...
но что делать, если этих параметров много и какие-то задаются при поиске, а какие-то нет????

Может как-то можно в sql.text вставить строку and tab777.date = :p_date3 в определенном месте??? например перед(union all), если с фильтром никак...
PM MAIL   Вверх
pseud
Дата 22.2.2010, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(lynx13 @  22.2.2010,  12:45 Найти цитируемый пост)
но что делать, если этих параметров много и какие-то задаются при поиске, а какие-то нет????

Есть несколько выходов:
1. если параметр не задан, ты передаешь null, если задан - передаешь значение. Такая конструкция съест оба варианта.
Код

and (<параметр_дата> is null or tab777.date = <параметр_дата>)

2. не совсем понятен твой селект, может его впринципе передалать если все селекты в нем идентичны.
можешь реализовать массив селектов в которые в циклах загонять параметры, а потом их объединять union all в общий селект.

Хотя я рекомендую пересмотртеть подход к селекту. Выкладывай всё. Может там глобально оптимизировать можно.


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Deniz
Дата 24.2.2010, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Цитата(pseud @  22.2.2010,  14:53 Найти цитируемый пост)
Такая конструкция съест оба варианта.
другой вариант конструкции:
Код
and (tab777.date = coalesce(<параметр_дата>, tab777.date))


Добавлено через 2 минуты и 14 секунд
Но все же поддерживаю.
Цитата(pseud @  22.2.2010,  14:53 Найти цитируемый пост)
Хотя я рекомендую пересмотртеть подход к селекту. Выкладывай всё. Может там глобально оптимизировать можно. 



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
pseud
Дата 25.2.2010, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Deniz, рановато плюсик дал )
ибо конструкция
Код

and (tab777.date = coalesce(<параметр_дата>, tab777.date))

абсолютно всегда будет отсеивать записи со значением tab777.date = null

конструкция же
Код

and (<параметр_дата> is null or tab777.date = <параметр_дата>)

при незаданном параметре вернет все записи, в том числе tab777.date = null


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Deniz
Дата 25.2.2010, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Цитата(pseud @  25.2.2010,  12:09 Найти цитируемый пост)
рановато плюсик дал )
 smile 
Цитата(pseud @  25.2.2010,  12:09 Найти цитируемый пост)
абсолютно всегда будет отсеивать записи со значением tab777.date = null

С Null'ами всегда есть грабли
Так же конструкция
Код
and (<параметр_дата> is null or tab777.date = <параметр_дата>)
не сможет выбрать только те записи, в которых tab777.date = null


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
pseud
Дата 25.2.2010, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(Deniz @  25.2.2010,  11:28 Найти цитируемый пост)
не сможет выбрать только те записи, в которых tab777.date = null

задача требует чего? 
Код

отобрать по конкретной дате или все. 

моя конструкция это решает.

если еще необходим и поиск отсутствия дат, то ваще огород имеем  smile 
Код

and ((<параметр_дата> is null and tab777.date is null) or tab777.date = <параметр_дата>)

но это мы с тобой далеко ушли  smile 


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Deniz
Дата 25.2.2010, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



pseud, мы еще и не туда дойдем  smile 
Но, ТС пометил вопрос как решенный, думаю не стоит дальше продолжать.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0887 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.