есть цикл do while в другом... примерной схемой Код (Text): do { do { } while ( ) ; } while ( ) ; внутренний цикл работает как положено, но с завершением закрывает и внешний
Поздравляю. Условия и порядок вычисления их значений мы сами должны додумать? --- Добавлено --- P.S. Чую, тема не для этого раздела.
@Олег Файн, дьявол он в деталях... всё дело в волшебных пузырьках условиях ну или break с параметром внутри внутреннего цикла
Код (Text): допустим <?php $db->query('SELECT * FROM cat_news LIMIT 10'); $cats = $db->FetchArray(); do { // этот цикл выводит только 1 запись ?> $cat_id = $cats['id']; вывод содержимого <?=$cats['title]; ?> <br> $db->query('SELECT * FROM news WHERE cat_id = $cat_id LIMIT 3'); $news= $db->FetchArray(); do { // этот цикл работает ?> Вывод новостей <?=$news['title]; ?> <br> <?php } while ($news= $db->FetchArray()); ?> <br> <?php } while ($cats= $db->FetchArray()); ?> --- Добавлено --- я читал про break, куда и как его вставить?), с каким параметром
@Олег Файн, всё очень плохо. Начни с осознания того, что запросы в цикле - это 99% твоя логическая ошибка.
Опять Попов-стайл. Пока не перевернете циклы, см. не стану --- Добавлено --- P.S. Чуйка меня не подвела
@miketomlin, переворачивание не поможет, условия одинаковые, как только false внутренний цикл, так сразу и внешний.
@Valick, а я и не говорил, что поможет --- Добавлено --- @Олег Файн, как выше намекнули, тут достаточно одного-двух запросов. И не мешайте их с разметкой! --- Добавлено --- Сортируйте в запросе новости по id категории. Мета-данные категории присоединяйте при помощи LEFT JOIN или выбирайте их отдельным запросом. При выводе отслеживайте изменение id категории. Как только появляется новый id, выводите заголовок категории. Так можно обойтись одним циклом. Конечно, это не ед. возможный способ реализации.
@Олег Файн, ну там так какой-то нестандартный класс с базой работает, и, видимо, не рассчитан на двойные запросы. Хотя, как сказали, лучше их избегать. И если этот класс - не часть фреймворка/cms, а самописная какая-нибудь оболочка, которая ничего интересного к PDO или mysqli не добавляет, я бы от неё избавился
P.S. Хотя у ТСа макс. три новости в каждой категории выводятся, а не все... --- Добавлено --- @mkramer, ну в шаблоне какую-то обертку для fetch лучше все же использовать. Естественно, я не беру в расчет возможность предварительного пересохранения всей выборки в двумерном массиве и т.п.
( Написал много букв и удалил ) @Олег Файн Фигня в том, что новый $qb->query() перекрывает результат предыдущего где-то там внутри реализации $db. Циклы как таковые не при чём. Эта реализация доступа к БД не позволяет использовать "вложенные fetch". Такая архитектурная особенность.
Потому что ололо дергает в двух циклах один и тот же результирующий контент, пока не вернется null. А там и родителю циклу очевидный ответ 1 - 2 - 3 - 4 - 5 - 0 0 --- Добавлено --- Опыт с лермы
Правильно. А то я уже написал тебе, что там все проще: PHP: } while ($news= $db->FetchArray()); ... } while ($cats= $db->FetchArray());
А вообще надо избегать запросов в цикле. Надо либо объединить таблицы в один запрос, либо выбрать сначала данные из одной и затем один раз запросить вторую с массивом ID из первого — так внутри Laravel Eloquent работает "жадный" запрос.
правильно, перекрывает, поэтому и не выводит (выводить не чего) потому что результат False) Понял в чем причина, всем спасибо, а запросы в цикле мне были нужны и без них в моем случае никуда, так что вот так вот)
Есть решения и для вашего случая. Даже оптимизированные, на основе оконных функций и т.п. (правда, в мускуле оконные ф-ции появились только в восьмерке, но ХЗ, что у вас за СУБД). --- Добавлено --- P.S. Вот у яши на первой странице серпа по запросу «sql выбрать по три записи одним запросом» нашел такое: http://www.sql-ex.ru/help/select16.php?Lang=0 --- Добавлено --- P.P.S. Может, проще выбирать актуальные новости по дате, чем по кол-ву.
На форуме точно были примеры как в MySQL получить N топовых записей из каждой группы. Только найти сложно --- Добавлено --- Гуглится как "MySQL get top n in group" Например это нашлось: https://stackoverflow.com/questions/2129693/using-limit-within-group-by-to-get-n-results-per-group Update: создал тему с примерами Top N, чтобы модно было комментировать и добавлять. https://php.ru/forum/threads/grouping-by-top-n-in-mysql.80189/