Forum Webscript.Ru
Программирование => Perl => Тема начата: Duke от 24 Ноября 2002, 04:50:25
-
Тут приспичило написать скриптик который вынимал бы из mysql таблицы только те
строки которые удовлетворяли бы параметрам запроса по нескольким параметрам этой строки.
Т.е. таблица 15 колонок - параметры радиоэлементов. Пользователь задает из 15
только 3 (например) - диапазон емкостей, пробивное U и массу искомого
кондёра, и скрипт выдает ему строки из бызы удовлетворяющие его запросу.
Можно сформулировать вопрос так:
Как дать "понять" базе, что если какой-либо параметр не задан, то выбирать информацию из таблицы игнорирую его, но не игнорируя заданные?
-
Это же очевидно. Проверить какие параметры заданныы и уже усновываясь на этом строить запрос
-
if($param5){$sql.="and param5>$param5";}
-
2AlieN, спасибо помогло. Встала другая задача.
if($param1){$sql.="param1>$param1";}
if($param2){$sql.="and param2>$param2";}
if($param3){$sql.="and param3>$param3";}
if($param4){$sql.="and param4>$param4";}
if($param5){$sql.="and param5>$param5";}
в результате если выбирут 2 и 4 параметры то получиться
$sql = "and param2>$param2 and param4>$param4"
а такой запрос MySQL обрабатывать отказывается
Как убрать "and" в начале строки "and param2>$param2 and param4>$param4"
-
if ($param1) {
if ($sql) {$sql.=" AND ";}
$sql.=\' param1>$param1";
}
ну и так далее.
ЗЫ
Вообще эту тему нужно в perl перенести.
-
sdelai tak :
$sql.=" 1=1 ";
if($param1){$sql.="param1>$param1";}
if($param2){$sql.="and param2>$param2";}
if($param3){$sql.="and param3>$param3";}
if($param4){$sql.="and param4>$param4";}
if($param5){$sql.="and param5>$param5";}
tak chtoby u tebia poluchilos\' takaia k primeru sql query:
"SELECT * FROM WHERE 1=1 and param2>$param2 and param4>$param4"
Vot tak prosto ;)
-
Stas, а про циклы ничего не слышал?
Ну а про то, что на БД не стоит возлагать лишнюю работу, я тебе уже написал в другом форуме.
my @array;
for (1..5) {push @array,"param1>$param[$_]" if $param[$_];}
$sql.=join(" AND ",@array);
-
stop.. ia tut ne pisal naskol\'ko krasiv kod kotoryi napisan vyshe.. I ne pisal kak mozhno ego izmenit\' v luchshuiu storonu...
Ne znaiu kak ty ne zametil, chto ia ot sebia dobavil vsego 1 liniu :
$sql.=" 1=1 ";
a kod nizhe protsitiroval Duke...
Malo, togo, tebe zdravyi smysl ne podskazyvaet, chto esli ia
про циклы ничего не слышал?
to ia by navernoe dazhe etot forum ne nashel !! ;)
-
Сделал самый простой вариант с "заглушкой" - $sql.=" 1=1 ";
Работает.
С массивами и вариантом Макса разбирусь позже.
-
Следующая задача.
в базе есть колонка зачения в которой буквенно-цифровые (varchar - или другой тип надо?). Сами значения такие M75, M750, H90 и т.д.
на запрос "SELECT * FROM condenser1 WHERE tke_grup=M75", база вообще не отвечает. Буквы и там, и там на английском (с русским боязно связываться, буду сначала говорить с MySQL на её родном языке :)).
-
Duke
кавычки поставьtke_grup=\'M75\'