Автор Тема: Проблема с циклами  (Прочитано 4278 раз)

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

Оффлайн DDHR

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://hopper.ru
Проблема с циклами
« : 30 Апреля 2004, 12:20:20 »
$categories = $dbh->prepare("SELECT * FROM categories WHERE type=\'news\'")|| die "Can\'t prepare statement: $DBI::errstr";
          $categories->execute;


          $sth = $dbh->prepare("SELECT * FROM articles WHERE type=\'news\' ORDER BY id DESC LIMIT 6")|| die "Can\'t prepare statement: $DBI::errstr";
          $sth->execute;





          while(($id, $type, $cat, $title, $description, $details, $author, $date, $time) = $sth->fetchrow_array())
          {

while(@row = $categories->fetchrow_array)
{

if ($row[1] eq $cat)
{
print $row[1],\'
\';
}

}


print $title, $description, $author, $date, $time,\'
\';

          }

          $dbh->disconnect; # отключиться от сервера SQL

В результате получаем страничку с новостями:

1 новость 1
2
3
4
5
6

а рядом с каждой новосють должно в случае, если $cat = $row[1], напечатать $row[1], однако внутренний цикл while срабатывает лишь единожды, тоесть печатает $row[1] (в случае равенства $cat) к первой новости, а к остальным нет, что и как переделать, чтобы внутренний цикл работал ко всем новостям?

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Проблема с циклами
« Ответ #1 : 30 Апреля 2004, 12:30:49 »
use strict; для начала.
2B OR NOT 2B = FF

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Проблема с циклами
« Ответ #2 : 30 Апреля 2004, 13:02:46 »
DDHR

Ну и делай запрос внутри цикла, при этом делай соответсвующую выборку:


$sth $dbh->prepare...
$sth->execute;
while((
$id$type... {

$categories $dbh->prepare... # здесь добавить условие в запросе по твоему условию - if ($row[1] eq $cat)
$categories->execute;
while(@
row $categories->fetchrow_array) { 
print ...
}
print...
}
$sth -> finish# Это тоже не надо забывать
...
...


Только при этом если делаешь выборку всех полей (SELECT *...) то результат не рекомендуется заносить в обычный массив, так как порядок полей в базе не обязателен и может изменяться, используй хеш массив ($categories->fetchrow_hashref), и зачем делать два запроса еслим в твоем случае можно обойтись одним???
Ну и как сказал Chs сначала... :)

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Проблема с циклами
« Ответ #3 : 30 Апреля 2004, 14:27:19 »
use SQLayer;
и подобных вопросов вопросов вообще не возникнет...
And no religion too...

Оффлайн DDHR

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://hopper.ru
Проблема с циклами
« Ответ #4 : 30 Апреля 2004, 14:32:30 »
у меня там предполагается ещё обработка массива с категориями...

Оффлайн DDHR

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://hopper.ru
Проблема с циклами
« Ответ #5 : 30 Апреля 2004, 14:38:13 »
Всё OK! СПАСИБО! Помогло!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Проблема с циклами
« Ответ #6 : 30 Апреля 2004, 14:53:57 »
commander
Если в программе ошибка логики то конечно нужно взять обертку к DBI вместо самого DBI, ага.
Постарайся так больше не отвечать потому как это больше запутывает а не помогает.
The documentations is your friend

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Проблема с циклами
« Ответ #7 : 30 Апреля 2004, 15:25:46 »
NeoNox
Ок... постараюсь... :)
просто на вопрос уже ответили... и я посчитал нужным посоветовать удобную обёрку с которой ошибок делаеться на много меньше... :)
And no religion too...

Оффлайн DDHR

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://hopper.ru
Проблема с циклами
« Ответ #8 : 01 Мая 2004, 15:24:59 »
Извините, попутно появился ещё вопрос:

Как мне цикл:

while(@row = $categories->fetchrow_array)
{

if ($row[1] eq $cat)
{
$n=1;
}

}

запихнуть ещё в один, только так чтобы он выполнялся пока $n не станет равным 1 (в цикле while(@row = $categories->fetchrow_array) )?

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Проблема с циклами
« Ответ #9 : 02 Мая 2004, 01:13:59 »
Выход из цикла:
last if $n==1;
The documentations is your friend

 

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