|
|
|
| Вопрос по использованию вложенного цикла While.
Задача такая:
Вывести на страницу все категории сайта
Вывести под каждой категорией список тизеров, которые показываются в этйо категории
В базе каждый тизер имеет поле где цифрой обозначено id категории к которой он принадлежит
Написан функцию, которая все это должна реализовать, но проблема в том, что все прекрасно работает только в первом шаге цикла.
Первыя цикл выводим список категорий и здесь все нормально, а далее вложенный цикл выводит список тизеров только к первой категории, к остальным нет.
Прилагаю код с коммментариями:
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>";
}
}
|
| |
|
|
|
|
|
|
|
для: allforweb
(28.12.2010 в 21:41)
| | Дело в том, что при прохождения цикла, дескриптор результирующей таблицы устанавливается в конец, чтобы его снова поставить в начало необходимо перед внутренним циклом вызывать функцию mysql_data_seek(), выставляя дескриптор $teaser снова на 0. | |
|
|
|
|
|
|
|
для: allforweb
(28.12.2010 в 21:41)
| | Во время второй итерации внешнего цикла, внутреннему циклу просто нечего доставать из базы - все записи уже вытащены.
Я бы сделал так:
<?php
$sql = "SELECT * FROM teasers t1
LEFT JOIN category t2 ON t1.id_cat = t2.category
ORDER BY t1.id_cat ASC";
$query = mysql_query($sql);
$cat_id = 0; // вводим "индикатор" текущей категории
/*
Допустим, что в массиве $arr будут содержаться следующие записи
cat_name - название категории
cat_id - id категории
*/
while($arr = mysql_fetch_assoc($query))
{
/*
Если id категории не равен текущему, то выводим название этой категории
и обновляем "индикатор"
*/
if ($arr['cat_id'] != $cat_id) {
$cat_id = $arr['cat_id'];
echo $arr['cat_name'] . '<br /><hr>';
}
echo "<a href='#'>уд</a> - <a href='#'>ред</a> - <a href='#'>а</a> - <a href='#'>{$row_teaser['title']}</a><br />";
}
|
Не забудьте подставить свои значения индексов и т.д. И вообще, вам главное понять предлагаемый принцип. | |
|
|
|
|
|
|
|
для: neadekvat
(28.12.2010 в 21:58)
| | Спасибо за помощь. Все понял. | |
|
|
|