Автор Тема: DBD-CSV вопросы, вопросы  (Прочитано 3177 раз)

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

Оффлайн AlexRH

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
DBD-CSV вопросы, вопросы
« : 20 Ноября 2003, 14:06:01 »
Здравствуйте!

Имеется текстовый файл с данными о сотрудниках нескольких предпирятий. Примерно такого вида.
   Воробьянинов|Ипполит|Матвеевич|Kisa@somethere.ru|заготовитель|Рога и Копыта|222-222|
   .....

Имеется скрипт для поиска в этом файле.
вот кусок кода:
<-----------
#!/usr/bin/perl
use DBI;
use CGI qw(:all);
use CGI::Carp qw(fatalsToBrowser);
#
$q =new CGI;

$sfam=$q->param(\'fam\');
$sim=$q->param(\'im\');
$sotch=$q->param(\'otch\');
$semail=$q->param(\'email\');
$sdolz=$q->param(\'dolz\');
$sorg=$q->param(\'org\');
$stel=$q->param(\'tel\');
$sfax=$q->param(\'fax\');
chomp($sfam, $sim, $sotch, $semail, $sdolz, $sorg, $stel, $sfax);

my $dbh = DBI->connect("DBI:CSV:f_dir=/tmp;");
$dbh->{\'csv_tables\'}->{\'addrb\'} = {
      \'eol\' => "\\n",
        \'sep_char\' => "|",
        \'quote_char\' => undef,
        \'escape_char\' => undef,
        \'file\' => "$ab",
        \'col_names\' => ["num", "email", "fam","im", "otch", "dolz", "org",
                        "addr", "tel", "fax", "filo"]
    };

my $output = $dbh->prepare("SELECT * FROM addrb
   WHERE org RLIKE \'$sorg\'
    AND (im RLIKE \'$sim\' AND fam RLIKE \'$sfam\')
   ");

while(($num, $email, $fam, $im, $otch, $dolz, $org, $addr, $tel, $fax, $filo)=$output->fetchrow_array) {
print "$num $fam $im $otch
 $email
 $dolz
 $org
 $tel
 $fax
";
}

$output->finish();
----------->
Помогите разобраться со след. вопросами.

Вопрос 1. Где можно взять описание модулей DBI-, DBD-CSV на русском и желательно с примерами.

Вопрос 2. Какие регулярные выражения можно использовать в запросах (кроме %).

Вопрос 3. Если в запросе (SELECT * FROM addrb WHERE fam RLIKE \'$sfam\') я пишу REGEXP вместо RLIKE получаю:
<--
Thu Nov 20 12:25:51 2003] 1addr.pl: SQL ERROR: Bad predicate: \'org REGEXP ?0?\'!
[Thu Nov 20 12:25:51 2003] 1addr.pl:
[Thu Nov 20 12:25:51 2003] 1addr.pl: SQL ERROR: Couldn\'t find predicate!
[Thu Nov 20 12:25:51 2003] 1addr.pl:
SV = RV(0x1ffac0) at 0x42fe40
  REFCNT = 1
  FLAGS = (PADBUSY,PADMY,ROK)
  RV = 0x54bbc0
[Thu Nov 20 12:25:51 2003] 1addr.pl: DBD::CSV::st execute failed: dbih_getcom ha
ndle DBD::CSV::Statement=HASH(0x54bbc0) is not a DBI handle (has no magic) at /u
sr/local/lib/perl5/site_perl/5.6.1/SQL/Statement.pm line 164.
[Thu Nov 20 12:25:51 2003] 1addr.pl: DBD::CSV::st fetchrow_array failed: Attempt
 to fetch row from a Non-SELECT statement at /var/www/cgi-bin/1addr.pl line 157.
-->

Вопрос 4. По SQL.
По запросу
("SELECT * FROM addrb
   WHERE org RLIKE \'$sorg\'
    AND (im RLIKE \'$sim\' AND fam RLIKE \'$sfam\')
   ");
выбирается строго, если только заполнены поля fam и im.

Как написать запрос чтобы:
а) Выбирал всех сотрудников предприятия, если в форме не было заполнено ни одного поля кроме "org" (оно заполняется в любом случае).
б) Выбирал сотрудника предприятия по любому из заполненых полей.


Заранее благодарен.

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
DBD-CSV вопросы, вопросы
« Ответ #1 : 20 Ноября 2003, 14:18:55 »
1. http://perldoc.narod.ru/
2. Хм... IMHO все те же(исключая операции замены...), что и в php, Jscript, perl(частично).
3. Не знаю как дела с CVS но в mysql рег. выражния работают только в операторе HAVING. Может и прогидится.
« Последнее редактирование: 20 Ноября 2003, 14:25:23 от ondr »
0 OK, 0:1

Оффлайн AlexRH

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
DBD-CSV вопросы, вопросы
« Ответ #2 : 20 Ноября 2003, 14:35:40 »
Спасибо.

Цитировать
ondr:
3. Не знаю как дела с CVS но в mysql рег. выражния работают только в операторе HAVING. Может и прогидится.


SELECT * FROM addrb HAVING org REGEXP "$sorg"
Это приблизительно так?

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
DBD-CSV вопросы, вопросы
« Ответ #3 : 20 Ноября 2003, 14:47:47 »
www.andrey.kaliningrad.fio.ru/mysql_man.zip  - Лови. Тут подробно описано. (опять же для mysql)
0 OK, 0:1

Оффлайн AlexRH

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
DBD-CSV вопросы, вопросы
« Ответ #4 : 21 Ноября 2003, 15:02:53 »
Вот что я надумал:
----------------
$qqq="SELECT * FROM addrb WHERE org RLIKE \'$sorg\'";
   if ($sfam) {
      $qqq .= " AND fam LIKE \'$sfam\'";
   }
.....
my $output = $dbh->prepare($qqq);
$output->execute;
-----------------
может несколько коряво, но работает.

 

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