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
Форумы портала PHP.SU :: Версия для печати :: Вложенные циклы While
Форумы портала PHP.SU » PHP » Программирование на PHP » Вложенные циклы While

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

1. allforweb - 28 Декабря, 2010 - 20:41:55 - перейти к сообщению
Вопрос по использованию вложенного цикла 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.  
2. Champion - 28 Декабря, 2010 - 20:48:52 - перейти к сообщению
Потому что mysql_fetch_array проходится по результату только один раз.
А сделать тут надо так:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT *
  2. FROM category c
  3. JOIN teasers t ON c.id_cat = category
И пройтись по этому одним циклом.
И надо придерживаться одного стиля в именовании таблиц, а то одна в ед. числе, другая во мн. И имена столбцов не очень удачны.
3. OrmaJever - 28 Декабря, 2010 - 20:49:49 - перейти к сообщению
строка

должна быть внутри первого цыкла и должно быть условие WHERE иначе она всегда будет выводить одно и тоже!
4. allforweb - 28 Декабря, 2010 - 21:37:00 - перейти к сообщению
Ошмбку понял. Спасибо.
5. JustUserR - 29 Декабря, 2010 - 09:48:25 - перейти к сообщению
allforweb Для решения предполагаемой вами задачи целесообразно использование соединения выбираемых информационнй полей на стороне сервера БД в таком композиционном SQL-запросе как явное соединение или вложенны выражения - такой подход позволяет включать непосредственный доступ к хранимым элемнтам и увеличить скорость получения связаннных условием данных

 

Powered by ExBB FM 1.0 RC1