Forum Webscript.Ru

Программирование => Perl => Тема начата: Duke от 24 Ноября 2002, 04:50:25

Название: perl -> mysql -> perl ->html
Отправлено: Duke от 24 Ноября 2002, 04:50:25
Тут приспичило написать скриптик который вынимал бы из mysql таблицы только те
строки которые удовлетворяли бы параметрам запроса по нескольким параметрам этой строки.
Т.е. таблица 15 колонок - параметры радиоэлементов. Пользователь задает из 15
только 3 (например) - диапазон емкостей, пробивное U и массу искомого
кондёра, и скрипт выдает ему строки из бызы удовлетворяющие его запросу.

Можно сформулировать вопрос так:
Как дать "понять" базе, что если какой-либо параметр не задан, то выбирать информацию из таблицы игнорирую его, но не игнорируя заданные?
Название: perl -> mysql -> perl ->html
Отправлено: Tarasenko от 24 Ноября 2002, 10:48:57
Это же очевидно. Проверить какие параметры заданныы и уже усновываясь на этом строить запрос
Название: perl -> mysql -> perl ->html
Отправлено: AlieN от 24 Ноября 2002, 15:54:22
if($param5){$sql.="and param5>$param5";}
Название: perl -> mysql -> perl ->html
Отправлено: Duke от 27 Ноября 2002, 23:09:35
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"
Название: perl -> mysql -> perl ->html
Отправлено: Макс от 28 Ноября 2002, 00:03:09
if ($param1) {
   if ($sql) {$sql.=" AND ";}
   $sql.=\' param1>$param1";
}

ну и так далее.


ЗЫ
Вообще эту тему нужно в perl перенести.
Название: perl -> mysql -> perl ->html
Отправлено: Stas от 28 Ноября 2002, 00:04:39
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 ;)
Название: perl -> mysql -> perl ->html
Отправлено: YA от 28 Ноября 2002, 01:36:48
Stas, а про циклы ничего не слышал?
Ну а про то, что на БД не стоит возлагать лишнюю работу, я тебе уже написал в другом форуме.

my @array;
for (1..5) {push @array,"param1>$param[$_]" if $param[$_];}
$sql.=join(" AND ",@array);
Название: perl -> mysql -> perl ->html
Отправлено: Stas от 28 Ноября 2002, 02:58:11
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 !! ;)
Название: perl -> mysql -> perl ->html
Отправлено: Duke от 28 Ноября 2002, 05:18:25
Сделал самый простой вариант с "заглушкой" - $sql.=" 1=1 ";
Работает.
С массивами и вариантом Макса разбирусь позже.
Название: perl -> mysql -> perl ->html
Отправлено: Duke от 28 Ноября 2002, 05:47:19
Следующая задача.

в базе есть колонка зачения в которой буквенно-цифровые (varchar - или другой тип надо?). Сами значения такие M75, M750, H90 и т.д.

на запрос "SELECT * FROM condenser1 WHERE tke_grup=M75", база вообще не отвечает. Буквы и там, и там на английском (с русским боязно связываться, буду сначала говорить с MySQL на её родном языке :)).
Название: perl -> mysql -> perl ->html
Отправлено: Metaller от 28 Ноября 2002, 09:58:54
Duke
кавычки поставь
Цитировать
tke_grup=\'M75\'