@jameson32

Не могу разобраться с выводом данных из базы. Выводится только одна строка, почему?

Вот такой код:

<?php


$db->Query("SELECT * FROM fanswer WHERE question_id = '$id'  ORDER BY a_id DESC");

if($db->NumRows() > 0){

while($ans = $db->FetchArray()){

$logina =$ans["a_name"];
$db->Query("SELECT * FROM db_users WHERE user = '$logina'");
$ua = $db->FetchArray();
$ua1 = $ua["ava"];
 

?>

<table width="95%" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td><table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">



<tr>
<td width="25%" bgcolor="#F8F7F1"><strong><center>
    
    
 <?  


 if(empty($ua1)) {
echo '<center><img src="/noava.png"></center>';
}else{
echo '<center><img src="/'.$ua['ava'].'"></center>';
} 
?>
    
    <?php echo $ans["a_name"]; ?></center></strong></td>

<td width="75%" bgcolor="#F8F7F1"><?php echo $ans["a_answer"]; ?></td>
</tr>
<tr>
<td bgcolor="#F8F7F1"></td>

<td bgcolor="#F8F7F1" style="text-align:right;"><?php echo 'Добавлено '.$ans["a_datetime"].'' ?></td>
</tr>
</table></td>
</tr>
</table><br><? } } ?>


Этот код выводит всего одну первую строку, но с данными из таблицы users (аватаром), но если убрать строки:

$logina =$ans["a_name"];
$db->Query("SELECT * FROM db_users WHERE user = '$logina'");
$ua = $db->FetchArray();
$ua1 = $ua["ava"];

то выводит все, но естественно без аватаров, которые прописаны в db_users.

Что не так делаю?
  • Вопрос задан
  • 196 просмотров
Решения вопроса 1
0xD34F
@0xD34F
Вы используете $db сразу для двух задач - естественно, что второй запрос приводит к тому, что его результат перетирает результат первого запроса.

Что делать? Есть три варианта - два дурацких, и один правильный:
  1. После выполнения первого запроса достаньте сразу все данные - закиньте их в отдельный массив, и обходите в цикле уже этот массив
  2. Не используйте $db для выполнения запроса внутри цикла - создайте для этого отдельный экземпляр класса, отвечающего за работу с БД
  3. Наконец, правильный вариант - доставайте все данные одним запросом, для этого вам потребуется разобраться с такой штукой как JOIN (вот прям берёте и гуглите - "sql join")
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы