• Как правильно написать цикл while внутри while в PHP?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Всё потому, что вы используете одно и то же подключение к базе данных. Получается так:
    1. Запрашиваются записи из db_news, база принимает этот запрос как текущий.
    2. Читается первая запись текущего запроса, т.е. из db_news.
    3. Через это же подключение запрашиваются записи из db_news_img. База запоминает новый запрос как текущий, готова передавать записи из db_news_img.
    4. Читается первая запись текущего запроса, т.е. из db_news_img.
    5. Возврат к началу цикла, хочется прочитать из db_news. Но этот запрос уже не является текущим, он "потерян", поэтому из него невозможно получить данные.
    6. Данных нет - значит конец цикла.

    Вам нужно запоминать и использовать указатель запроса, скорее всего так:
    $db_res1 = $db->Query("SELECT * FROM db_news WHERE cat_id = '$catid' ORDER BY id DESC");//
    if($db_res1->NumRows() > 0){
           while($news = $db_res1->FetchArray()){
                   $textfull = $news["news"];
                    $db_res2 = $db->Query("SELECT * FROM db_news_img WHERE news_id = '$news[id]' ORDER BY id DESC");//
                    if($db_res2->NumRows() > 0){
                            while($img = $db_res2->FetchArray()){
    Ответ написан
    Комментировать
  • Как правильно написать цикл while внутри while в PHP?

    daemonhk
    @daemonhk
    ПсиХоПат
    Получать данные заранее(!!!), а не в цикле и не посреди вывода страницы!!!

    1. Использовать LEFT/INNER JOIN
    или
    2. Перебрать массив с картинками так, чтобы ключом был id новости, тогда можно проверять наличие картинки для новости - if(isset($news_img[$news["id"]])) и потребуется всего один цикл
    Ответ написан
    2 комментария