Автор Тема: perl -> mysql -> perl ->html  (Прочитано 5203 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Duke

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 15
  • +0/-0
  • 0
    • Просмотр профиля
    • http://games.siberianet.ru
perl -> mysql -> perl ->html
« : 24 Ноября 2002, 04:50:25 »
Тут приспичило написать скриптик который вынимал бы из mysql таблицы только те
строки которые удовлетворяли бы параметрам запроса по нескольким параметрам этой строки.
Т.е. таблица 15 колонок - параметры радиоэлементов. Пользователь задает из 15
только 3 (например) - диапазон емкостей, пробивное U и массу искомого
кондёра, и скрипт выдает ему строки из бызы удовлетворяющие его запросу.

Можно сформулировать вопрос так:
Как дать "понять" базе, что если какой-либо параметр не задан, то выбирать информацию из таблицы игнорирую его, но не игнорируя заданные?

Оффлайн Tarasenko

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 38
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
perl -> mysql -> perl ->html
« Ответ #1 : 24 Ноября 2002, 10:48:57 »
Это же очевидно. Проверить какие параметры заданныы и уже усновываясь на этом строить запрос

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
perl -> mysql -> perl ->html
« Ответ #2 : 24 Ноября 2002, 15:54:22 »
if($param5){$sql.="and param5>$param5";}
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Duke

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 15
  • +0/-0
  • 0
    • Просмотр профиля
    • http://games.siberianet.ru
perl -> mysql -> perl ->html
« Ответ #3 : 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"

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
perl -> mysql -> perl ->html
« Ответ #4 : 28 Ноября 2002, 00:03:09 »
if ($param1) {
   if ($sql) {$sql.=" AND ";}
   $sql.=\' param1>$param1";
}

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


ЗЫ
Вообще эту тему нужно в perl перенести.
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Stas

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 304
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.isfuture.com
perl -> mysql -> perl ->html
« Ответ #5 : 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 ;)

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
perl -> mysql -> perl ->html
« Ответ #6 : 28 Ноября 2002, 01:36:48 »
Stas, а про циклы ничего не слышал?
Ну а про то, что на БД не стоит возлагать лишнюю работу, я тебе уже написал в другом форуме.

my @array;
for (1..5) {push @array,"param1>$param[$_]" if $param[$_];}
$sql.=join(" AND ",@array);
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн Stas

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 304
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.isfuture.com
perl -> mysql -> perl ->html
« Ответ #7 : 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 !! ;)

Оффлайн Duke

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 15
  • +0/-0
  • 0
    • Просмотр профиля
    • http://games.siberianet.ru
perl -> mysql -> perl ->html
« Ответ #8 : 28 Ноября 2002, 05:18:25 »
Сделал самый простой вариант с "заглушкой" - $sql.=" 1=1 ";
Работает.
С массивами и вариантом Макса разбирусь позже.

Оффлайн Duke

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 15
  • +0/-0
  • 0
    • Просмотр профиля
    • http://games.siberianet.ru
perl -> mysql -> perl ->html
« Ответ #9 : 28 Ноября 2002, 05:47:19 »
Следующая задача.

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

на запрос "SELECT * FROM condenser1 WHERE tke_grup=M75", база вообще не отвечает. Буквы и там, и там на английском (с русским боязно связываться, буду сначала говорить с MySQL на её родном языке :)).
« Последнее редактирование: 28 Ноября 2002, 05:56:06 от Duke »

Оффлайн Metaller

  • Мелкое злобное существо
  • Ветеран
  • *****
  • Сообщений: 538
  • +0/-0
  • 2
    • Просмотр профиля
    • http://michael.pp.ru
perl -> mysql -> perl ->html
« Ответ #10 : 28 Ноября 2002, 09:58:54 »
Duke
кавычки поставь
Цитировать
tke_grup=\'M75\'
Everybody\'s Got A Ticket To Ride Except For Me And My Lightning...

 

Sitemap 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