Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вложенные циклы While

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
allforweb
Отправлено: 28 Декабря, 2010 - 20:41:55
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Вопрос по использованию вложенного цикла While.
Задача такая:
Вывести на страницу все категории сайта
Вывести под каждой категорией список тизеров, которые показываются в этйо категории
В базе каждый тизер имеет поле где цифрой обозначено id категории к которой он принадлежит

Написан функцию, которая все это должна реализовать, но проблема в том, что все прекрасно работает только в первом шаге цикла.

Первыя цикл выводим список категорий и здесь все нормально, а далее вложенный цикл выводит список тизеров только к первой категории, к остальным нет.

Прилагаю код с коммментариями:

PHP:
скопировать код в буфер обмена
  1. function teaser2()
  2.     {
  3.         $category = mysql_query("SELECT * FROM category"); //выбираю все категории
  4.         $teaser = mysql_query ("SELECT * FROM teasers"); // выбираю все тизеры
  5.         while ($row_category = mysql_fetch_array($category)) //вывожу категории в цикле
  6.         {
  7.             echo $row_category['name'];
  8.             echo "<br /><hr>";
  9.             while ($row_teaser = mysql_fetch_array($teaser)) //вывожу тизеры в цикле
  10.             {
  11.                 if ($row_teaser['category'] != $row_category['id_cat']) //если id категории тизера не равно id самой категории – продолжаю цикл без вывода
  12.                 {
  13.                    continue;
  14.                 } else { // иначе вывожу тизер на страницу                  
  15.                    echo "<a href='#'>уд</a> - <a href='#'>ред</a> - <a href='#'>а</a> - <a href='#'> ".$row_teaser['title']."</a><br />";
  16.                 }  
  17.             }
  18.             echo "<br /><hr>";
  19.         }
  20.     }
  21.  
 
 Top
Champion Супермодератор
Отправлено: 28 Декабря, 2010 - 20:48:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Потому что mysql_fetch_array проходится по результату только один раз.
А сделать тут надо так:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT *
  2. FROM category c
  3. JOIN teasers t ON c.id_cat = category
И пройтись по этому одним циклом.
И надо придерживаться одного стиля в именовании таблиц, а то одна в ед. числе, другая во мн. И имена столбцов не очень удачны.
 
 Top
OrmaJever Модератор
Отправлено: 28 Декабря, 2010 - 20:49:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




строка

должна быть внутри первого цыкла и должно быть условие WHERE иначе она всегда будет выводить одно и тоже!


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
allforweb
Отправлено: 28 Декабря, 2010 - 21:37:00
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Ошмбку понял. Спасибо.
 
 Top
JustUserR
Отправлено: 29 Декабря, 2010 - 09:48:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




allforweb Для решения предполагаемой вами задачи целесообразно использование соединения выбираемых информационнй полей на стороне сервера БД в таком композиционном SQL-запросе как явное соединение или вложенны выражения - такой подход позволяет включать непосредственный доступ к хранимым элемнтам и увеличить скорость получения связаннных условием данных


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB