Наметил писать портал, хочется изначально выбрать грамотный алгоритм его работы, чтобы в конечном итоге портал работал быстро. Допустим, я вывожу блок с комментариями к новости, всего там 9 комментариев. Как это сделать грамотней? Засунуть в цикл запрос к БД, чтобы в итоге было 9 обращений к БД, отдельно для каждого комментария, или лучше вытащить сразу все комментарии одним запросом, засунуть их в массив, и уже из массива выводить в цикле? И вообще, есть ли разница, сделать 9 запросов к БД, вытаскивая по одной записи, или сделать один запрос и вытащить сразу 9?
Разница есть, делать 1 запрос на выборку записей по данной новости. Сразу всместе с инфой о пользователях, которые эти комменты напостили, есть таковая инфа имеется
Ну это понятно, там будет несколько массивов - с текстами, авторами, датами. Просто для примера я рассматриваю один. А ничего, если там будет например 50 комментариев и некоторые из них грамосткие? Ведь наличие в коде таких толстых массивов из 50 элементов загрузит аперативку на хостинге на сколько-то там ещё килобайт?) Не говоря уже о том, что в коде появится второй цикл. Вот как я себе это представляю: * Без массивов - цикл выполняется всего один раз, внутри которого происходит 9 запросов к БД и вывод результатов. * С массивами - сначала выполняется первый цикл, который заносит результат обращения к БД в массив. Потом выполняется второй цикл, который выводит результат из массива. Вот и даже хз, что выбрать из двух зол.
Один цикл можно сделать и во втором случае. Вот например как-то так PHP: <?php // подключились к б.д., всё такое $sql = "SELECT `comments`.`title`, `comments`.`text`, `users`.`username` FROM `comments` LEFT JOIN `users` USING(`user_id`) WHERE `comments`.`theme_id` = {$themeId} LIMIT {$start}, {$perPage}"; $result = mysql_query($sql, $dblink); if($result and mysql_num_rows($result) > 0) { while($row = mysql_fetch_assoc($result)) { if(empty($row['username']) $row['username'] = 'Гость'; ?> <div> <b><?php echo($row['title']); ?></b><br /> Пользователь: <?php echo(htmlspecialchars($row['username'])); ?><br /> <?php echo(nl2br(htmlspecialchars($row['text']))); ?><br /> </div> <hr /> <?php } } else { echo('Пока ещё нет комментариев'); } ?>