wrag
|
|
« : 26 Мая 2008, 14:07:10 » |
|
везде в инете описано что делать надо так (простая выборка столбцов):
my $sth = $dbh->prepare("SELECT * from test"); $sth->execute();
while (my $ref = $sth->fetchrow_hashref()) {print "$DATE->{'DATE'} $TIME->{'TIME'} $CALLED_DN->{'CALLED'} $CALLING_DN->{'CALLING'} $RELEASE_->{'relese'} <br>\n";};} $sth->finish();
$DATE->{'DATE'}--как я понял это связывание значения переменной со столбцом таблицы типа если совпало то выводим хотя могу ошибаться не нашел путного обьяснения даже в родной справке.
причем вывод имеет вид
ххххххх хххххххххххх ххххххххх ххххххххх ххххххххххххх ххххххх
но как модифицировать приведенный ниже кусок: (то есть чтобы была выборка по условию WHERE причем чтобы в WHERE еще и работали условия: >= и <= )
$dbh->do("SELECT 1DATE, 1TIME, CALLING_DN, CALLED_DN, RELEASE_ from test WHERE CALLED_DN=\"$called\" AND CALLING_DN=\"$calling\" AND 1TIME>=\"$begintime\" AND 1TIME<=\"$endtime\" AND 1DATE>=\"$begindate\" AND 1DATE<=\"$enddate\"; ") };
|
|
« Последнее редактирование: 26 Мая 2008, 15:12:18 от wrag »
|
Записан
|
живущий в консоли начальник отдела системотехники Люцифеp
|
|
|
all
Небритый одмин
Карма: 2
Сообщений: 730
Windows Vista Power Pack 2008)))
|
ну на сколько я знаком с перлов то у него енсть 3 типа доступа к данным из запроса: fetchrow_array fetchrow_arrayref fetchrow_hashref (что значат посмотрите в мануале лень описывать).
при создании сложных хапросов с переменными прдлогаю использовать конкнтенацию текстровых строк: например $a."sdbjkdbgkjsdf".$b а не простую вставку переменных (меньше потом ошибок вылезет)
{'CALLING'} это поле БД полученное с помощью fetchrow_hashref.
и потом у вас запрос неработает или выводит непонятно что?
PS и еще пока нетт опыта работы с запросами поставте себе phpmyadmin и выполняйте sql запрос там потом нажните на кнопку php код (он подходит для перла) и в него уже вставте свои переменные
|
|
« Последнее редактирование: 26 Мая 2008, 16:43:01 от all »
|
Записан
|
all-all-blog.blogspot.com - мысли о пингвинах, паяльниках и др. интересной хрени.
|
|
|
wrag
|
в общем описываю ситуацию у меня юникс на нем прел апач и майскуль все работает совместно
возникла проблема никак не удаеться вывести данные в HTML из perl сложный запрос к mysql базе собственно сам запрос внизу первого поста а вот как реализовать это пока не нашел поэтому прошу кто в курсах как сие реализовать откликнитесь
|
|
|
Записан
|
живущий в консоли начальник отдела системотехники Люцифеp
|
|
|
wrag
|
ну на сколько я знаком с перлов то у него енсть 3 типа доступа к данным из запроса: fetchrow_array fetchrow_arrayref fetchrow_hashref (что значат посмотрите в мануале лень описывать).
ну про это написано в мане но как то вскользь fetchrow_array Возвращает следующую запись как массив fetchrow_arrayref Возвращает следующую запись как ссылку на массив fetchrow_hashref Возвращает следующую запись как ссылку на хеш fetchall_arrayref Возвращает всю информацию как массив массивов fetchrow_array Этот метод выбирает очередную строку данных и возвращает ее как массив значений полей. Пример: while(@row = $sth -> fetchrow_array) { print qw($row[0]\t$row[1]\t$row[2]\n); } fetchrow_arrayref Этот метод выбирает очередную строку данных и возвращает ссылку на массив значений полей. Пример: while($row_ref = $sth -> fetchrow_arrayref) { print qw($row_ref -> - \t$row_ref -> [1]\t$row_ref ->
[2]\n); }
fetchrow_hashref Этот метод выбирает строку данных и возвращает ссылку на хеш, содержащий пары имя/значение. Данный метод намного менее эффективен, чем использование пописанных выше ссылок на массивы. Пример: while($hash_ref = $sth -> fetchrow_hashref) { print qw($hash_ref -> {firstname}\t$hash_ref -> {lastname}\t$hash_ref ->{title}\n); }
fetchall_arrayref Этот метод выдает все данные (все строки), получаемые как результат SQL-запроса. Он возвращает ссылку на массив ссылок на массивы отдельных строк. Соответственно, для обращения к этим данным нужно использовать вложенный цикл. Пример: my $table = $sth -> fetchall_arrayref or die "$sth -> errstr\n"; my($i, $j); for $i ( 0 .. $#{$table}} ) { for $j ( 0 .. $#{$table -> [$i]} ) { print "$table -> [$i][$j]\t"; } print "\n"; }
все и больше нигде не нахожу инфы которая рассмотрела бы каждый случай более подробно чтобы разобраться
например: qw($row_ref -> - \--кусочек который мне не ясен
что за qw? а дальше что есть что? где строка? где переменная? где столбец? ну и в том же плане разобрать все остальное
|
|
|
Записан
|
живущий в консоли начальник отдела системотехники Люцифеp
|
|
|
all
Небритый одмин
Карма: 2
Сообщений: 730
Windows Vista Power Pack 2008)))
|
ye qw - это просто ) она создает массив из строки типа (1 2 3 4), где разделитель, в данном случае пробел.
далее
qw($hash_ref -> {firstname} \t $hash_ref ->{lastname} \t $hash_ref ->{title} \n);
эта строка создает тип массива и выводит его (ИМХО бред для меня) - qw тут только для дальнейщей обработки.
ЗЫ php есть на сервере? если есть то через 5 мин код напишу)
|
|
« Последнее редактирование: 27 Мая 2008, 12:19:22 от all »
|
Записан
|
all-all-blog.blogspot.com - мысли о пингвинах, паяльниках и др. интересной хрени.
|
|
|
wrag
|
есть то есть ты можеш написать скрипт на пхп чтобы он выводил из базы по сложному запросу на хтмл страницу результат? ? просто то что удалось в конце концов сделать выводит запрос но появилась проблемма при выводе размер страницы получился под 40 метров
|
|
« Последнее редактирование: 28 Мая 2008, 16:21:07 от wrag »
|
Записан
|
живущий в консоли начальник отдела системотехники Люцифеp
|
|
|
NeO
Злобный админчик
Администратор
Карма: 62
Сообщений: 2376
Debian Stretch
|
просто то что удалось в конце концов сделать выводит запрос но появилась проблемма при выводе размер страницы получился под 40 метров Добавь "LIMIT x,y" к запросу. Где х - номер первого выводимого элемента, у - номер последнего выводимого элемента.
|
|
|
Записан
|
|
|
|
wrag
|
в общем я так понял что для сборки динамического сложного запроса надо собрать сначала строку которая будет вставлена после слова where
проверяем длину переменных затем собираем часть строки с одной переменной если такая не поступила то зануляем ее чтоб не мешалась с другими переменными тоже составляем часть строки по аналогии if (length($calling) > 3) {$s1="CALLING_DN="."%"."$calling"."%"} else {$s1=""}; if (length($called) > 3) {$s2="and "."CALLED_DN="."%"."$called"."%"} else {$s2=""}; if (length($begindate) > 8 ) {$s3="and "."DATE>="."$begindate"} else {$s3=""}; if (length($enddate) > 8 ) {$s4="and "."DATE<="."$enddate"} else {$s4=""}; if (length($begintime) > 8 ) {$s5="and "."TIME>="."$begintime"} else {$s5=""}; if (length($endtime) > 8 ) {$s6="and "."TIME<="."$endtime"} else {$s6=""};
собираем строку $where=$s1.$s2.$s3.$s4.$s5.$s6; проверяем что у нас собралось print $where;
выполняем запрос к базе my $query = "SELECT 1DATE, 1TIME, CALLING_DN, CALLED_DN, RELEASE_ from observ WHERE \"$where\" ";
|
|
|
Записан
|
живущий в консоли начальник отдела системотехники Люцифеp
|
|
|
young
Юзверь
Карма: 0
Сообщений: 53
SlackWare 12.2, CentOS 5.1, FreeBSD 6.2
|
SELECT 1DATE, 1TIME, CALLING_DN, CALLED_DN, RELEASE_ from test WHERE CALLED_DN=\"$called\" AND CALLING_DN=\"$calling\" AND 1TIME>=\"$begintime\" AND 1TIME<=\"$endtime\" AND 1DATE>=\"$begindate\" AND 1DATE<=\"$enddate\
попробуй для начала дать этот запрос в консоли mySQL, будешь прятно удивлен, что он не работает... SELECT a, b, c, d FROM ctable WHERE e > 12 GROUP BY a;
и еще в догонку... Таблицы в базе с большой/ большими буквами не называют...
|
|
|
Записан
|
|
|
|
wrag
|
ну так конечно не заработает в кавычках переменные которые еще получить надо:) \"$чтототам\" -переменная перловая
|
|
|
Записан
|
живущий в консоли начальник отдела системотехники Люцифеp
|
|
|
MAG
|
wrag Вообще что требуется? Проверь сами требования. А то у тебя получается много условий "И"... попробуй для начала дать этот запрос в консоли mySQL, будешь прятно удивлен, что он не работает... SELECT a, b, c, d FROM ctable WHERE e > 12 GROUP BY a;
GROUP BY здесь не подойдет... и еще в догонку... Таблицы в базе с большой/ большими буквами не называют...
Создаются и еще как! И все прекрасно работает (а если в книге видишь надпись "нельзя!" - выкини книгу, и попробуй сперва БД поболе написать на SQL - поймешь)
|
|
|
Записан
|
|
|
|
wrag
|
не условий в самый раз да и вобщем все работает как нельзя лучше осталось только проиндексировать столбцы в таблице
|
|
|
Записан
|
живущий в консоли начальник отдела системотехники Люцифеp
|
|
|
|