Вопрос по использованию вложенного цикла While. Задача такая: Вывести на страницу все категории сайта Вывести под каждой категорией список тизеров, которые показываются в этйо категории В базе каждый тизер имеет поле где цифрой обозначено id категории к которой он принадлежит Написан функцию, которая все это должна реализовать, но проблема в том, что все прекрасно работает только в первом шаге цикла. Первыя цикл выводим список категорий и здесь все нормально, а далее вложенный цикл выводит список тизеров только к первой категории, к остальным нет. Прилагаю код с коммментариями: [js]function teaser2() { $category = mysql_query("SELECT * FROM category"); //выбираю все категории $teaser = mysql_query ("SELECT * FROM teasers"); // выбираю все тизеры while ($row_category = mysql_fetch_array($category)) //вывожу категории в цикле { echo $row_category['name']; echo "<br /><hr>"; while ($row_teaser = mysql_fetch_array($teaser)) //вывожу тизеры в цикле { if ($row_teaser['category'] != $row_category['id_cat']) //если id категории тизера не равно id самой категории – продолжаю цикл без вывода { continue; } else { // иначе вывожу тизер на страницу echo "<a href='#'>уд</a> - <a href='#'>ред</a> - <a href='#'>а</a> - <a href='#'> ".$row_teaser['title']."</a><br />"; } } echo "<br /><hr>"; } }[/js]
Я вот новичок и не могу понять зачем здесь функция нужна, Код (Text): $teaser = mysql_query ("SELECT * FROM teasers"); // выбираю все тизеры можно же: $teaser = mysql_query ("SELECT * FROM `teasers` WHERE `category id` = '$row_category[id_cat]' "); // while, for и построили таблицу с названием категорий и ихних тизеров
конструкция обработки возвращаяемого sql ресурса сработает лишь один раз. Код (Text): function teaser2(){ $category = mysql_query("SELECT * FROM category"); //выбираю все категории $teaser = mysql_query ("SELECT * FROM teasers"); // выбираю все тизеры $teasers = array(); while ($row_teaser = mysql_fetch_array($teaser)){ $teasers[] = $row_teaser; } while ($row_category = mysql_fetch_array($category)){ echo $row_category['name']; echo "<br /><hr>"; foreach($teasers as $row_teaser){ if ($row_teaser['category'] != $row_category['id_cat']){ continue; } else { // иначе вывожу тизер на страницу echo "<a href='#'>уд</a> - <a href='#'>ред</a> - <a href='#'>а</a> - <a href='#'> ".$row_teaser['title']."</a><br />"; } } echo "<br /><hr>"; } }
allforweb Не уверен что mysql_ умеет фетчить сразу два ресурса на одном подключении. По крайней мере для odbtp мне приходится делать два подключения. Или сначала все взять из первого запроса, а потом уже работать со вторым. Что, собственно, и предложил Gromo. marsik И будет у тебя число запросов равное количеству категорий +1, что нехорошо и сильно сказывается на времени генерации страницы. Ну и мой вариант. =)) [js]function teaser2() { $res = mysql_query("SELECT c.name, t.title FROM category as c left outer join teasers as t on t.category=c.id_cat "); $cat=''; while ($row = mysql_fetch_array($res)){ if ($cat!=$row['name']){ echo "<br /><hr>"; echo $row['name']; echo "<br /><hr>"; $cat=$row['name']; } echo "<a href='#'>уд</a> - <a href='#'>ред</a> - <a href='#'>а</a> - <a href='#'> ".$row['title']."</a><br />"; } }[/js]