Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Сфильтровать параметры
|
|||
|---|---|---|---|
|
#18+
При нажатии кнопки ОК в запрос передаются параметры ...sell.csp?SMark=&SYearS=&Volume=&SBody=&PriceS=&SYearPo=&PricePo= Нужно чтобы запрос выполнялся при любой комбинации параметров, выложите кусок кода, который проверяет существеут ли параметр и если да, то учитывает или не учитывает его, взависимости от выбранного значения. Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2007, 17:04 |
|
||
|
Сфильтровать параметры
|
|||
|---|---|---|---|
|
#18+
смотрите класс %CSP.Request обращаться в нему через переменную %request например %request.Get("Volume") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2007, 18:35 |
|
||
|
Сфильтровать параметры
|
|||
|---|---|---|---|
|
#18+
Я не это имел ввиду, вот запрос Query GetAd(Mark As %String, Ys As %String, Ypo As %String, V As %String, BT As %String, Pri1 As %String, Pri2 As %String) As %SQLQuery { select * FROM Salon.Advertisement as SA,Salon.Mark as SM,Salon.Body as SB where SA.Mark=SM.ID and SA.BodyType=SB.ID and SM.ID=:Mark and SA.DofProd between :Ys and:Ypo and SA.Volume=:V and SB.ID=:BT and SA.Price between :Pri1 and :Pri2 } Но он работает только если из формы передаются ВСЕ 7 параметров. Если-же 1 из них пустой, то запрос не работает. Можно конечно написать тыщу миллионов ифов и столько-же запросов для каждой комбинации, но лучше подскажите(а лучше выложите) кто сталкивался код, который будет фильтровать параметры и откидывать их, если он пустой. Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2007, 19:49 |
|
||
|
Сфильтровать параметры
|
|||
|---|---|---|---|
|
#18+
Bednii_Student ....... Но он работает только если из формы передаются ВСЕ 7 параметров. Если-же 1 из них пустой, то запрос не работает. Можно конечно написать тыщу миллионов ифов и столько-же запросов для каждой комбинации, но лучше подскажите(а лучше выложите) кто сталкивался код, который будет фильтровать параметры и откидывать их, если он пустой. Заранее благодарен. SQL выражение это по сути своей строка символов. SQL имеет свой синтаксис и если у Вас SQL запрос определен в классе на сервере, то изменить его уже нельзя. Единственное что можно менять, так это значения параметров. Если у Вас параметра нет или он пустой, то получается в строке используется неизвестная переменная и поэтому SQL дает ошибку. В этом случае можно решить проблемму используя команду $Get. Вы просто перестраховываетесь и проверяете значение переменной, то есть в любом случае в параметр уйдет какое то значение и ошибки не будет. CSP страница для примера: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2007, 05:01 |
|
||
|
Сфильтровать параметры
|
|||
|---|---|---|---|
|
#18+
Функция $Get(%request.Data("Param1"),"Test1") проверяет существует ли "Param1", а то, что "Param1"=пустому значение нет. Поэтому не работает. Есть еще варианты кроме условных конструкций? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2007, 13:46 |
|
||
|
Сфильтровать параметры
|
|||
|---|---|---|---|
|
#18+
Если в запросе Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. у вас стоит and SA.Volume=:V, то как должно обрабатываться это условие по вашему? Есть язык настолько сообразительный, что без условных коснтрукций выбросит эту строку целиком? Возможно вам подойдет динамический запрос (не без условных конструкций!) Примерно так, на отсутствие синтаксических ошибок не проверял Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. и переделан под ваш запрос. В запросе я подразумевал, что все поля числове, для текстовых например нужно добавить кавычки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2007, 19:15 |
|
||
|
Сфильтровать параметры
|
|||
|---|---|---|---|
|
#18+
Ну намудрили =)) Я конечно понимаю что вопрос 3-хлетней давности, но все же... А что ISNULL уже отменили ;-)) ??? Код: plaintext 1. 2. 3. 4. 5. 6. только с диапазонами надо подумать, т.к. есть 2 границы верхняя и нижняя самое простое - при отсутствии хотя бы одной границы - считать блок условия как TRUE, т.е. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2011, 02:23 |
|
||
|
Сфильтровать параметры
|
|||
|---|---|---|---|
|
#18+
На самом деле я бы предпочел сделать с конструктором строки запроса, так как есть подозрения, что в вашем случае будут задействованы не те индексы (условия по полям, которые несущественны). Кроме того, я не уверен (проверять лень), что ISNULL будет работать с определенными внешними переменными, а они скорее всего будут определены. Я бы написал так: OR :Mark ="" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2011, 08:06 |
|
||
|
Сфильтровать параметры
|
|||
|---|---|---|---|
|
#18+
Я давно использую аналоги приведенного примера в рабочей системе, работает замечательно. Не стоит бояться ISNULL - он не кусается ;=)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2011, 05:09 |
|
||
|
Сфильтровать параметры
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.На самом деле я бы предпочел сделать с конструктором строки запроса, так как есть подозрения, что в вашем случае будут задействованы не те индексы (условия по полям, которые несущественны). вот на счет этого соглашусь. если формировать строку запроса до того, как он попал к оптимизатору, и выкинуть из него 100% не существенные условия (то есть те, которые просто не должны там учитываться) - оптимизатору будет проще построить более оптимальный план выполнения запроса и он будет выполняться быстрее ситуацию может отчасти спасти покрывающий индекс по всем полям, используемым в условии, но всеравно план выполнения запроса будет не оптимальным. просто у топикстартера слишком много неопределенных параметров, у меня на практике как правило 1-2 параметра бывают, когда скоренько надо сделать какой-то отчет считаю что решение с ISNULL подходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2011, 05:35 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=37058147&tid=1557851]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
161ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 261ms |
| total: | 498ms |

| 0 / 0 |
