Вложенный цикл while в php при получении данных из базы данных

<?php
$sqlquerypmenu = "select * 
                    from subsubmenu 
                    where submenu_id=1 
                    and position='left' 
                    and status=1";
if($querypmenu = sqlsrv_query($conn,$sqlquerypmenu)){
    if(sqlsrv_has_rows($querypmenu) === true){
        while($rowdata = sqlsrv_fetch_array($querypmenu, SQLSRV_FETCH_ASSOC)){
?>                            
<h4 class="title-small folder_name">  <?php echo $rowdata ['website_title'];   ?> </h4>
 <?php
            $id = $rowdata['id']; 
            $filequerymenu = "select * 
                                from upload_files 
                                where main_menu='value_name' 
                                and sub_menu='value_key' 
                                and subsub_menu= $id  ";  
            if($filemenu = sqlsrv_query($conn,$filequerymenu)){
                if(sqlsrv_has_rows($filemenu) === true){ 
                    while($filedata = sqlsrv_fetch_array($filemenu, SQLSRV_FETCH_ASSOC)){  ?>
<a class="smalltext font_val" href="<?php echo DOCUMENT_URL.$filedata ['file_name'];  ?> "  target="_blank"  ><?php echo $filedata['document_name']; ?></a> 
<?php
                    } 
                } 
            }     
        }
    }
}
?> 

Во вложенном пока цикл второй пока цикл показывает только первую строку данных и не показывает остальные данные.

Как я могу это исправить?

Пожалуйста, используйте доступные правила форматирования.

FedeCaceres 13.09.2018 20:25

Было бы неплохо сделать некоторый разумный отступ в коде. Это помогает нам читать код и, что более важно, помогает вы отлаживаете свой кодВзгляните на стандарт кодирования для вашей же выгоды. Вас могут попросить изменить этот код через несколько недель / месяцев, и в конце вы будете благодарить меня.

RiggsFolly 13.09.2018 20:29
Маленькая заметкаsqlsrv_has_rows() вернул логическое значение, поэтому вы можете проверить эту строку if(sqlsrv_has_rows($filemenu) >0){
RiggsFolly 13.09.2018 20:37

@RiggsFolly спасибо. Я исправил эту часть, но она все равно не дает желаемого результата

nishant3 13.09.2018 20:39

Вы абсолютно уверены, что строк должно быть больше одной?

RiggsFolly 13.09.2018 21:06

Вам не хватает символа '?>' В конце строки 'SQLSRV_FETCH_ASSOC)) {'.

NoOne 14.09.2018 10:00

@riggsfolly yesss в базе данных более одной строки

nishant3 14.09.2018 10:23

@C Hunter В моем коде это было. Я не знаю, почему этого не было здесь. Я отредактировал приведенный выше код, но он все еще не дает ожидаемых результатов.

nishant3 14.09.2018 15:27

@ nishant3 ... проходит ли внешний цикл по ВСЕМ строкам или только по первой?

Parfait 14.09.2018 15:49
0
9
168
1

Ответы 1

Рассмотрите возможность однократного запроса к базе данных с помощью одного запроса JOIN. Возможно, открытие другой выборки в цикле while вызывает проблемы с экземплярами:

<?php
...

$sql = "select s.website_title, u.file_name, u.document_name
        from upload_files u
        inner join subsubmenu s ON u.subsub_menu = s.id
        where u.main_menu = 'value_name' 
          and u.sub_menu = 'value_key'
          and s.submenu_id = 1 
          and s.[position] = 'left'
          and s.[status] = 1
        order by s.id, s.website_title;"

$title = "";

if($result = sqlsrv_query($conn, $sql)){
    if(sqlsrv_has_rows($result) === true){
        while($rowdata = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)){

             if($title != $rowdata['website_title']) {
                  $title = $rowdata['website_title'] 
?>
               <h4 class="title-small folder_name">  <?php echo $rowdata ['website_title'];   ?> </h4>
<?php
             }
?>    
                    <a class="smalltext font_val" href="<?php echo DOCUMENT_URL.$filedata ['file_name'];  ?> "  target="_blank"  ><?php echo $filedata['document_name']; ?></a>
<?php
        }
    }        
}

?>

Другие вопросы по теме