В настоящее время я разрабатываю форум как личный проект. Одна из повторяющихся проблем, с которыми я сталкивался, - это запросы к базе данных в циклах. До сих пор мне удалось избежать этого, используя объединения таблиц или кэширование данных в массивах для последующего использования.
Прямо сейчас, хотя я столкнулся с ситуацией, когда я не уверен, как я могу написать код таким образом, чтобы я мог легко использовать любой из этих методов. Однако я все же предпочел бы выполнить не более 2 запросов для этой операции, а не 1 + 1 на группу форумов, что до сих пор приводило к 5 на страницу. Поэтому, хотя число 5 невелико (хотя оно будет увеличиваться для каждой добавляемой группы форумов), для меня здесь важен принцип, я НЕ хочу писать запросы в циклах
То, что я делаю, - это отображение групп индексов форумов (например, форумов администраторов, форумов пользователей и т. Д.), А затем каждого форума в этой группе в одном индексе страниц, это сочетание обоих на одной странице вызывает у меня проблему. Если бы это была всего одна группа на страницу, я бы использовал объединение таблиц и проблема была решена. Но если я использую здесь соединение таблиц, хотя я потенциально могу получить все нужные мне данные, они будут представлены в виде одной массы результатов и должны отображаться правильно.
Вот код (я убрал часть HTML для ясности)
<?php
$sql= "select * from forum_groups"; //query 1
$result1 = $database->query($sql);
while($group = mysql_fetch_assoc($result1)) //first loop
{?>
<table class="threads">
<tr>
<td class="forumgroupheader"> <?php echo $group['group_name']; ?> </td>
</tr>
<tr>
<td class="forumgroupheader2"> <?php echo $group['group_desc']; ?> </td>
</tr>
</table>
<table>
<tr>
<th class="thforum"> Forum Name</th>
<th class="thforum"> Forum Decsription</th>
<th class="thforum"> Last Post </th>
<tr>
<?php
$group_id = $group['id'];
$sql = "SELECT forums.id, forums.forum_group_id, forums.forum_name, forums.forum_desc, forums.visible_rank, forums.locked, forums.lock_rank, forums.topics, forums.posts, forums.last_post, forums.last_post_id, users.username
FROM forums
LEFT JOIN users on forums.last_post_id=users.id
WHERE forum_group_id='{$group_id}'";
//query 2
$result2 = $database->query($sql);
while($forum = mysql_fetch_assoc($result2))
//second loop
{?>
Так как же я могу
а) написать SQL таким образом, чтобы удалить второй запрос из цикла или
б) объединить результаты в массив
В любом случае мне нужно иметь возможность доступа к данным как к тому моменту, когда я смогу правильно отформатировать их для вывода страницы, то есть внутри неподвижных циклов.