jasonOk
@jasonOk
Легче болтать, чем код писать

Как организовать правильные запросы?

Вопрос связан с mysql-запросом
Есть список "статей" выводится на страницу с помощью while($row = $query -> fetch())
А проблема в том, что нужно отображать не только сами статьи, но и
  • количество комментариев к ним
  • Логин последнего прокомментировавшего и время комментария
  • Логин автора

Для всего этого отдельные запросы, а в других случаях их и того больше получается.

Много разных запросов к БД. И выглядит всё примерно так
while($row = $stmt -> fetch()){

$query = $DB->prepare("SELECT `login`,`gender`,`email` FROM `users`  WHERE `id`=:author limit 1");
$query -> bindParam(':author', $row['author']);
$query -> execute();
$T2 = $query -> fetch();

$query = $DB->prepare("SELECT `id`,`time`,`name` FROM `comments`  WHERE `comTo`=:id ORDER BY `id` DESC limit 1");
$query -> bindParam(':id', $row['id']);
$query -> execute();
$T = $query -> fetch();

// Допустим так выводит
echo "Название <a href="site.com/topic/'.$row['id'].'">".$row['name'].'</a>';
echo '<br> Автор <a href="'.$row['author'].'">'.$row[''].'</a>';
// и т.д.

} // end while

Суть в том, что я очень сомневаюсь, что так правильно делать. Слышал запросы в цикле делать грех, а выводить так через echo и подавно...

Бд очень будет нагружаться, верно?
Направьте на путь истинный!
  • Вопрос задан
  • 715 просмотров
Пригласить эксперта
Ответы на вопрос 3
talgatbaltasov
@talgatbaltasov
Freelancer
прочтите про join
Ответ написан
Комментировать
Adamos
@Adamos
Даже без JOIN (мало ли, какие-то данные могут быть многострочными) совершенно необязательно городить циклы.
Вы запросили статьи. Получили данные. Зачем сразу выводить? Соберите их пока в массив, попутно создавая массив id статей, авторов, чего там еще понадобится.
Следующим номером сделайте один (!) запрос - SELECT author_name FROM authors WHERE author_id IN (у нас уже есть этот массив). Аналогичный запрос или два к таблице с комментариями - и все, больше вам базу дергать не требуется, и все данные для вывода получены.

Глядишь, понемногу придет осознание, какую пользу приносит разделение логики и вывода...
Ответ написан
Комментировать
@shagguboy
>количество комментариев к ним

завести отдельное поле "comments_count" и обновлять его при вставке/удалении коммента.
Ответ написан
Ваш ответ на вопрос

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

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