Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выбор данных, у которых совпадают до 10 условий 
V
    Опции темы
oigolikova
Дата 27.7.2009, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет.
У кого-нибудь стояла задача: выбрать данные, при совпадении 10 условий? 
Насколько я знаю, то это необходимо писать 2 в степени 10 всех возможных вариантов выбранных условий. Кто-то знает другой вариант?
Более конкретно: есть таблица Документы и таблица События с этими документами (максимальное значение событий 10, но они могут повторяться). Данные связаны по уникальному номеру из таблицы Документов.
Нужно выбрать те документы, у кого будут все события, которые отмечены на форме.
Помогите, пожалуйста. smile 
PM MAIL   Вверх
Данкинг
Дата 27.7.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Так а where чем не подходит?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
oigolikova
Дата 27.7.2009, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



тем что на форме можно отметить, что будем искать такое событие, а можно не отметить...а код события записывается в одно и тоже поле....просто в разных строках.... а на 10 событий можно написать аж 1024 варианта выделенных событий, что нужно отобрать... проблема только в этом.
PM MAIL   Вверх
DimW
Дата 27.7.2009, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

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



Цитата(oigolikova @  27.7.2009,  15:26 Найти цитируемый пост)
у кого будут все события, которые отмечены на форме.

Код

select doc_id
  from doc_row
 where action in (:p_action1, :p_action2, :p_action3)
group by doc_id
having count(distinct action) = (decode(:p_action1, null, 0, 1) + decode(:p_action2, null, 0, 1) + decode(:p_action3, null, 0, 1))


:p_action1, :p_action2, :p_action3 - параметры на форме припомощи которых выбираешь нужные события(допустим их всего 3).
count(distinct action) - контрольная сумма событий документа, т.е. количество уникальных событий для документа.
 (decode(:p_action1, null, 0, 1) + decode(:p_action2, null, 0, 1) + decode(:p_action3, null, 0, 1)) - сравнение контрольной суммы параметров, т.е. количество не пустых значений параметров должно быть равно уникальному кол-ву событий для документа.

decode(:p_action1, null, 0, 1) - не знаю какой функцией заменить decode, но работает он так: если параметер пустой то 0 иначе 1.

надеюсь идея понятна, как заточить под фокспро вам видней, в нем я не силен, извиняйте.

Добавлено @ 17:21
Цитата(oigolikova @  27.7.2009,  17:16 Найти цитируемый пост)
а на 10 событий можно написать аж 1024 варианта выделенных событий

вот здесь непонял, поясните плиз.

Это сообщение отредактировал(а) DimW - 27.7.2009, 17:22
PM MAIL ICQ   Вверх
Cashey
Дата 30.7.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

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



Цитата(oigolikova @  27.7.2009,  18:16 Найти цитируемый пост)
тем что на форме можно отметить, что будем искать такое событие, а можно не отметить...а код события записывается в одно и тоже поле....просто в разных строках.... а на 10 событий можно написать аж 1024 варианта выделенных событий, что нужно отобрать... проблема только в этом.

полей для отбора 10? если да то where по условия (поле = значение с формы or empty(значение с формы)) или же слепить строку отбора и вставить ее макроподстановкой


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
oigolikova
Дата 30.7.2009, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



выкладываю таблицы, откуда становится понятно, что одно поле, но 10 значений...
отобрать хотят данные по этим значениям... то только с одним, то с двумя, то со всеми 10...

Добавлено через 1 минуту и 16 секунд
только всем спасибо, мне уже помогли на другом форуме...
хотя я бы рассмотрела вариант попроще smile

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Data.rar 1,12 Kb
PM MAIL   Вверх
DimW
Дата 31.7.2009, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

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



Цитата(Cashey @  30.7.2009,  11:44 Найти цитируемый пост)
полей для отбора 10?

нет, критериев для поля 10, а поле одно.

Цитата(oigolikova @  30.7.2009,  12:15 Найти цитируемый пост)
хотя я бы рассмотрела вариант попроще

куда еще проще, чем я предложил? или вы даже поробывать не удасужились?
PM MAIL ICQ   Вверх
Cashey
Дата 31.7.2009, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

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



если поле 1, то вообще не понимаю в чем проблема?
WHERE INLIST(field,value1,value2,value3, ....,value25)


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
DimW
Дата 31.7.2009, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

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



Цитата(Cashey @  31.7.2009,  10:31 Найти цитируемый пост)
если поле 1, то вообще не понимаю в чем проблема?
WHERE INLIST(field,value1,value2,value3, ....,value25) 

ну насколько я понял проблему то она выглядит так:
у документа есть пусть 5 возможных событий, причем в таблице событий на документ они не уникальны т.е. документ в одном событии может оказаться несколько раз.

пусть есть документ DOC_1
который побывал в 3-х событиях:
ACTION_1 - два раза
ACTION_2 - один раз
ACTION_3 - пять раз

так вот если пользователь на форме поставил галочки на события ACTION_1, ACTION_2, ACTION_3, ACTION_4, то 
документ этот не должен найтись т.к. автору нужно:
Цитата(oigolikova @  27.7.2009,  15:26 Найти цитируемый пост)
у кого будут все события, которые отмечены на форме

ключивое слово в цитате - все события
и только если будут стоять галочки на ACTION_1, ACTION_2, ACTION_3 - DOC_1 должет быть результатом запроса.

PM MAIL ICQ   Вверх
oigolikova
Дата 31.7.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Автору было нужно, чтобы нашлись те докуметы, у которых есть именно ACTION_1, ACTION_2, ACTION_3. У кого есть ACTION_1,  но нет ACTION_2 или ACTION_3, те документы нам не нужны.
Ваш вариант работает не так, как нужно мне. 
А если выбраны 10 событий на форме, то все те документы, у которых есть эти 10 событий, а по сколько раз они произошли с этим документом не важно.

PM MAIL   Вверх
DimW
Дата 31.7.2009, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

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



Цитата(oigolikova @  31.7.2009,  14:07 Найти цитируемый пост)
Автору было нужно

т.е. количество выбранных типов событий на форме поиска должно совподать с уникальным количеством событий документа, так?
Цитата(oigolikova @  31.7.2009,  14:07 Найти цитируемый пост)
а по сколько раз они произошли с этим документом не важно

вот это как раз таки важно при написании запроса.
Цитата(oigolikova @  31.7.2009,  14:07 Найти цитируемый пост)
Ваш вариант работает не так, как нужно мне. 

ну так давайте посмотрим ваш вариант написаный на основе моего и поймем что там не так, если есть желание конечно.
вполне может быть что я что то не учел.  вобщем покажите тестовые данные, результат и запрос которым вы его получили.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Foxpro/Clipper/Dbase"
MoLeX

Запрещается!

1. Публиковать ссылки для чисто рекламных целей.

2. Оффтопить, флеймить, говорить не культурно.

Пожалуйста, адекватно задавайте свой вопрос. Тема должна создаваться с названием характеризующем Вашу проблему.

Задавайте вопросы правильно - как спросите, так вам и ответят.

Разрешено!

Давать ссылки на статьи, обзоры, если это не нарушает первый пункт правил.

Задавая вопрос, давайте нужную информацию касающуюся Вашей проблемы. Этим вы ускорите полезные ответы.

P.S. Размещение рекламы будет строго наказываться!



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

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Foxpro/Clipper/Dbase | Следующая тема »


 




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


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

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