Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Любое значение во WHERE
|
|||
|---|---|---|---|
|
#18+
Задача на простом примере. Делается запрос на php: pg_query_params($conn, 'SELECT * FROM med_card WHERE gender=? AND age_min<? AND age_max>?', array('m', 20,30)) В общем такой механизм наверное не только в php есть. Бывает что нужно искать записи где gender=f, либо gender=m, либо вообще пофиг. Как в таком случае указать что подходит любое значение? В документации я не нашел как это сделать. Попытка методом тыка выполнить в PgAdmine запросы типа select * from med_card where gender= and age_min<30, age_max>30 select * from med_card where gender=* and age_min<30, age_max>30 select * from med_card where gender=ANY and age_min<30, age_max>30 select * from med_card where gender=ANYVAL and age_min<30, age_max>30 успехов не принесла Сразу хочу уточнить, я знаю что есть слово ANY в синтаксисе SELECT * FROM smtg WHERE a= ANY(smtg_arr) и что это не то. Также я знаю что pg_query_params при подставлении значений добавляет кавычки и pg_query_params($conn, 'select * from med_card where gender=? and age_min=?, age_max=?', array('ANY', 20,30)) равно select * from med_card where gender='ANY' and age_min=30, age_max=30 Вариант составлять WHERE-часть врукопашную, тоже не вызывет особого оптимизма. В общем-то можно, но не технично. Мне сейчас интересна принципиальная возможность составления запроса такого типа. Насколько я понимаю ничего сложного в реализации этой фишки нет, нужно всего лишь при разборе запроса не включать части условия, в которых есть выражение типа a=ANYVAL в query tree. Могу предположить что такую проверку нужно делать где то в том же районе, что и проверку на a=NULL и что на производительности это не дожно сказаться. Возможно это даже можно самому поправить в исходниках PostgreSQL. С другой стороны, возможно, я недокурил мануалы и такая возможность уже есть. Просветите, плиз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2007, 02:30 |
|
||
|
Любое значение во WHERE
|
|||
|---|---|---|---|
|
#18+
Если искомое значение для gender передается в виде переменной подстановки, то можно записать что-то типа такого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2007, 05:10 |
|
||
|
Любое значение во WHERE
|
|||
|---|---|---|---|
|
#18+
А нельзя ли Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2007, 08:42 |
|
||
|
Любое значение во WHERE
|
|||
|---|---|---|---|
|
#18+
ShadyAngel Мне сейчас интересна принципиальная возможность составления запроса такого типа. Извините, что-то я с утра не проснулся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2007, 08:46 |
|
||
|
Любое значение во WHERE
|
|||
|---|---|---|---|
|
#18+
ShadyAngel Мне сейчас интересна принципиальная возможность составления запроса такого типа. хотя смысла в том не вижу (нужно таки строить иной план запроса, а не пытацо...блаблабла), но с Like вместо = должно прокатить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2007, 10:27 |
|
||
|
Любое значение во WHERE
|
|||
|---|---|---|---|
|
#18+
хм... такие строки имхо вполне можно клеить... нет? $sqlstr = "selet * from t where x"; if (a) $sqlstr .= " ,y"; if (b) $sqlstr .= " ,z"; или я не понял вопрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2007, 11:15 |
|
||
|
Любое значение во WHERE
|
|||
|---|---|---|---|
|
#18+
4321: Хотелось бы чтобы наличие этого кодового слова также аннулировало бы условия поиска с < и > rastafarra: суть вопроса в том что в ряде можно один раз сформировать запрос, а потом 1000 раз его выполнить, подставляя разные значения. Вроде бы как это быстрее. Кроме того, на мой взгляд, это удобнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2007, 11:36 |
|
||
|
Любое значение во WHERE
|
|||
|---|---|---|---|
|
#18+
ShadyAngel4321: Хотелось бы чтобы наличие этого кодового слова также аннулировало бы условия поиска с < и > rastafarra: суть вопроса в том что в ряде можно один раз сформировать запрос, а потом 1000 раз его выполнить, подставляя разные значения. Вроде бы как это быстрее. Кроме того, на мой взгляд, это удобнее."это быстрее" если план запроса соответствует. а при замене условия "=" на "любое" план запроса, быстрый для "=" будет нервно курить в сторонке. поэтому предлагаю вам застрелиться с вашими соображениями о быстроте и удобстве. падобрамуканешна. т.е. гуманно - из духового ружжа. не надо изобретать глупостей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2007, 12:27 |
|
||
|
Любое значение во WHERE
|
|||
|---|---|---|---|
|
#18+
ShadyAngelВариант составлять WHERE-часть врукопашную, тоже не вызывет особого оптимизма. В общем-то можно, но не технично. пардон, вот это я пропутил... но, имхо, было бы здорово передавать именованный массив. pg_query_params($conn, 'SELECT * FROM med_card WHERE gender=? AND age_min<? AND age_max>?', array('gender'=>'m', 'age_min'=>20, 'age_max'=>30)) или pg_query_params($conn, 'SELECT * FROM med_card WHERE gender=? AND age_min<? AND age_max>?', array('age_min'=>20, 'age_max'=>30, 'gender'=>'m')) а для этого надо писать процедуру pg_query_params, в которой этот where и собирать в зависимости от. хм... вообще занятно, надо попробовать такую штуку реализовать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2007, 12:42 |
|
||
|
Любое значение во WHERE
|
|||
|---|---|---|---|
|
#18+
ShadyAngelВариант составлять WHERE-часть врукопашную, тоже не вызывет особого оптимизма. В общем-то можно, но не технично.мы так делаем тынц (PERL) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2007, 13:10 |
|
||
|
|

start [/forum/topic.php?fid=53&gotonew=1&tid=2004921]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
31ms |
get topic data: |
7ms |
get first new msg: |
4ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 299ms |

| 0 / 0 |
