Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Фильтрация
|
|||
|---|---|---|---|
|
#18+
При загрузке формы высвечивается выборка. Remote View. Первоначальную выборку надо фильтровать по многим условиям Типа: или валюта, или диапазон дат, или банк, или государство и т.д. Или все, или разная комбинация. Задать в вьюере все параметры не могу (могут быть не нужны в данный момент). Есть что-то типа фильтрации первоначальной выборки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2004, 14:12 |
|
||
|
Фильтрация
|
|||
|---|---|---|---|
|
#18+
Ой, больная тема. Создание выборки по заранее неизвестному условию. Есть 2 принципиальных способа решения: 1) Написание "универсальных" условий, что-то вроде: WHERE MyDate BETWEEN ?fromDate AND ?toDate Если условие по датам не нужны, то устанавливаешь параметры заведомо большие чем могут быть, ну что-то вроде: fromDate={^1900-01-01} toDate={3000-01-01} Понятно, что в такой диапазон попадут абсолютно все записи. То же самое повторяешь по всем возможным критериям отбора. 2) Отказаться от фиксированного Remote View и писать запрос напрямую через SQLExec() 3) Нечто среднее между 2 первыми способами. Делается Remote View по тем критериям, которые будут использованы с максимальной вероятностью и дадут минимальную выборку. Остальные критерии используются для наложения фильтра на результат выборки. Ну, например, по датам скорее всего условия будут обязательны. Результат выборки будет относительно невелик (ну, допустим, выборка за месяц - тысяча записей). А все остальные критерии отбора используем уже для фильтрации полученной тысячи записей на клиентском месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2004, 14:30 |
|
||
|
Фильтрация
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Спасибо, что уделяете внимание. 1. SqlExec - пробовала. Условия срабатывают норм. Но если надо удалить, откор. из сквозного запроса не получ. считать ключевые поля. Да и Грид прописывать... 2. Закладывать поля по значениям больше? Но надо фильтр и по сумме и часто по первым сколько-то символам наименованиям. (Начинается Company а дальше типа не помню) 3. При всем этом надо итоговые суммы по каким-то полям( в зависимости от фильтра) На клиентском месте - это как? Через remote..? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2004, 14:50 |
|
||
|
Фильтрация
|
|||
|---|---|---|---|
|
#18+
Khor-Olga 1. SqlExec - пробовала. Условия срабатывают норм. Но если надо удалить, откор. из сквозного запроса не получ. считать ключевые поля. Да и Грид прописывать... Ну да, программить придется значительно больше, но в общем ничего особо сложного. Khor-Olga 2. Закладывать поля по значениям больше? Но надо фильтр и по сумме и часто по первым сколько-то символам наименованиям. (Начинается Company а дальше типа не помню) Нет. Писать избыточное условие. Ну, например: SELECT ... WHERE MyData BETWEEN ?fromDate AND ?toDate AND MyCurrency BETWEEN ?fromSum AND ?toSum Если условие по дате не задано, то принудительно устанавливаю такие значения даты, при которых в выборку попадут все записи, но по суммам устанавливаю нужные значения. Что-то вроде fromDate={^1900-01-01} toDate={^3000-01-01} fromSum=1 toSum=10 Requery("MyView") Понятно, что при таких значениях в выборку попадут только записи со значением поля MyCurrecncy от 1 до 10, а условие по дате фактически проигнорировано, поскольку в этот диапазон дат укладываются все значения. Khor-Olga 3. При всем этом надо итоговые суммы по каким-то полям( в зависимости от фильтра) На клиентском месте - это как? Через remote..? Remote View по сути - это временная таблица и обращаться с ней можно как с таблицей, т.е накладывать фильтры тоже можно. USE MyView SET FILTER TO BETWEEN(MyCurrency,m.fromSum,m.toSum) Т.е. в самом Remote View есть условия ТОЛЬКО по дате, а условие по суммам я накладываю на предварительно полученную выборку отобранную по датам. Но это имеет смысл только в том случае если эта предварительная выборка относительно невелика по размерам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2004, 17:23 |
|
||
|
Фильтрация
|
|||
|---|---|---|---|
|
#18+
ВладимирМ >>USE MyView >>SET FILTER TO BETWEEN(MyCurrency,m.fromSum,m.toSum) Были в практике случаи, когда в выборке за месяц (4000) надо было предоставить поиск где-то по 15 еще условиям. Т.е. получается что в этом случае - только SQL Pass Through ? И еще помимо фильтрации нужны итоговые суммы. Это два запроса: на Select и Sum? Или есть уже какие-то дополн. компоненты или библиотеки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2004, 09:41 |
|
||
|
Фильтрация
|
|||
|---|---|---|---|
|
#18+
Khor-OlgaВладимирМ >>USE MyView >>SET FILTER TO BETWEEN(MyCurrency,m.fromSum,m.toSum) Были в практике случаи, когда в выборке за месяц (4000) надо было предоставить поиск где-то по 15 еще условиям. Т.е. получается что в этом случае - только SQL Pass Through ? Критичным является не количество записей, а объем в байтах скачиваемый с сервера. Т.е. если речь идет о 10 небольших полях, то и 4000 записей может быть отобрано очень быстро. Это надо просто проверить. Сколько времени потребуется для открытия такого View в выборке которого 4000 записей. Кроме того, ограничение по датам я привел просто для примера. Можно в основном запросе поставить в обязательном порядке 3...4 наиболее часто употребимых условия, с тем расчетом, чтобы при их использовании конечная выборка была относительно невелика. А все прочие условия (если они будут) накладывать уже на результирующую выборку. Khor-OlgaИ еще помимо фильтрации нужны итоговые суммы. Это два запроса: на Select и Sum? Или есть уже какие-то дополн. компоненты или библиотеки? Да, после получения выборки надо будет делать еще одну выборку. Просто в FoxPro есть еще несколько команд для того же самого: CALCULATE SUM TOTAL По сути, они делают то же самое, что и Select-SQL с SUM. Однако у каждой из них есть свои особенности работы. Это тебе надо почитать Help и поэкспериментировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2004, 09:50 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32653977&tid=1595981]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
39ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 286ms |
| total: | 392ms |

| 0 / 0 |
