Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Нужна помощь по работе с Базами Данных


Автор: rodendron 22.3.2005, 16:15
sub view_main {
for (0 .. $vagreis->last_record) {
my ($deleted, $nv, $kg, $grot, $kgp, $esr_pogr, $qgv) = $vagreis->get_record($_,"NV", "KG", "GROT", "KGP", "ESR_POGR", "QGV");
if($kg = "23107") {
for (0 .. $grota->last_record) {
my ($deleted, $name, $st, $tgnl) = $grota->get_record($_,"NAME", "ST", "TGNL");
if($grot = $tgnl and $esr_pogr = $st) { print "$grot $tgnl $esr_pogr $st $name<br>"; }
}
}
}
}


Эта процедура выводит все записи из таблицы vagreis и grota.
То есть находит в vagreis запись и выбирает из grota соответсвующие ей.
например:

vagreis = 1,1,1,1,1,1
grota = 1,2,2,2,2,2
grota = 1,3,3,3,3,3
vagreis = 5,1,1,1,1,1
grota = 5,2,2,2,2,2
grota = 5,3,3,3,3,3
grota = 5,4,4,4,4,4
и т.д.

получается я четко не могу знать сколько записей найдется
а мне надо вывести только по 50 на каждой страничке
считать в массив все, и затем работать с ним - нереально, так как данные в массив копируются ну очень долго (столько же, сколько и выводятся, тогда уж проще их сразу вывести)

в связи с этим вопрос, как сделать разбивку по страничкам?

допустим поступает запрос. Вывести 50 записей с первой.

$start = 1;
$end = 50;
Вот так это работает:
for (0 .. $vagreis->last_record) { # из vagreis выбираем
...
for ($start .. $end) { из grota выбираем
print "$name";.

И если потом выбрать чтобы вывелись записи с 51 по 100, то тоже самое, только:

$start = 51;
$end = 100;
Вот так это работает:
for (0 .. $vagreis->last_record) { # из vagreis выбираем
...
for ($start .. $end) { из grota выбираем
print "$name";.

Но это неправильно, потому что когда мы дойдем до конца таблицы grota, то не сможем обратиться к параметрам выбора из vagreis
То есть из vagreis всегда будут выбираться данные с 0 по последнее.

Смысл такой, надо, не пользуясь массивами, изобразить следующее:
____________________________________________________
sub view_main {
for (0 .. $vagreis->last_record) {
my ($deleted, $nv, $kg, $grot, $kgp, $esr_pogr, $qgv) = $vagreis->get_record($_,"NV", "KG", "GROT", "KGP", "ESR_POGR", "QGV");
if($kg = "23107") {
for (0 .. $grota->last_record) {
my ($deleted, $name, $st, $tgnl) = $grota->get_record($_,"NAME", "ST", "TGNL");
if($grot = $tgnl and $esr_pogr = $st) { @array = ($grot, $tgnl, $esr_pogr, $st, $name); }
}
}
}
}

$start = 1;
$end = 50;

for ($i = $start; $i<$end; $i++) {
print "@array[$i]";
}
____________________________________________________

Заранее благодарен за помощь.

Автор: rodendron 22.3.2005, 18:01
Народ, большое сорри!
В Perl же проверка равенства это не одно равно, а два.
Пересел с одного языка на другой
сорри!

Автор: Chuck 22.3.2005, 18:15
Ващет как я понял у тя там строка!
А сравнение строк выглядит так
Код

 if($kg eq "23107")  {...}

Автор: korob2001 22.3.2005, 18:18
Цитата

Народ, большое сорри!
В Perl же проверка равенства это не одно равно, а два.
Пересел с одного языка на другой
сорри!

Если сравниваешь числа, то == , если строки, то eq
Теперь попробуй сам поправить свой код.

Удачи

ЗЫ:
rodendron

Модератор:
1. в одном топике, один вопрос и всё что с ним связано.
2. Когда вставляешь код, пользуйся кнопкой "Код".

Автор: rodendron 23.3.2005, 13:01
Спасибо!
А если я сравниваю русские буквы, то как сравнивать?
то есть

Код

$kgf = 'Песок';
$namekg = 'Песок';

if($kgf eq $namekg) { print "OK"; }


Не срабатывает

Автор: korob2001 23.3.2005, 13:25
Для сравнения кирилицы, подключи прагму use locale, в начале скрипта, потом сравнивай, так как в твоём примере.

Автор: rodendron 23.3.2005, 15:54
Цитата(korob2001 @ 23.3.2005, 13:25)
Для сравнения кирилицы, подключи прагму use locale, в начале скрипта, потом сравнивай, так как в твоём примере.

А это модуль такой?
А то чего-то не найду.

Автор: korob2001 23.3.2005, 15:58
rodendron - что типа модуля, если быть точнее, модуль прагмы.
Просто в начале скрипта напиши вот так:
Код

#!/usr/bin/perl
use locale;
# Здесь пиши свой код

Удачи smile

Автор: Phoinix 23.3.2005, 16:17
korob2001

Я незнаю как у Вас, а у меня use locale; никогда само по себе не срабатывало, еще и POSIX подключать надо...
Код

  use locale;
  use POSIX qw (locale_h);
  setlocale(LC_CTYPE, 'ru_RU.CP1251');
  setlocale(LC_ALL, "ru_RU.CP1251");

Автор: korob2001 23.3.2005, 16:22
Phoinix - а у нас всегда срабатывало. Вообще-то этим и занимается use locale.

Автор: Phoinix 23.3.2005, 16:26
korob2001
[OFF]
Просто смутное предчувствие, что это будет следующим вопросом
[/OFF]
А вообще, одно другому не мешает... ;)

Автор: korob2001 23.3.2005, 16:30
Phoinix - что у тебя за ось???

Автор: rodendron 24.3.2005, 13:59
А как быть с кавычками?

Значения из базы бывают вида ООО "Телеинтел".

вот это не помогает:

Код

$go = "$FORM{'go'}";


Резалтом является "ООО "

Заранее благодарен за ответ.
smile

Автор: korob2001 24.3.2005, 14:06
Ничего не понял, ты о чём??? Опиши подробнее чего ты хочешь добиться. smile

Автор: rodendron 24.3.2005, 14:08
Простите...
Не смог рахобраться - вот и написал
а потом сразу разобрался.
Еще раз ссори.

ЗЫ:
Код

<OPTION VALUE='$go'>...

Автор: korob2001 24.3.2005, 14:12

Модератор: в одном топике, один вопрос и всё что с ним связано.
Тема закрыта

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)