PHP-如何从循环内删除此查询?

我目前正在将论坛设计为个人项目.我遇到的重复出现的问题之一是循环中的数据库查询.到目前为止,我已经设法避免使用表连接或将数据缓存在数组中以备后用的方法.

现在,尽管遇到了一种不确定的情况,即我不确定如何以可以轻松使用这两种方法的方式编写代码.但是,我仍然希望对此操作最多执行2个查询,而不是每组论坛1个,到目前为止,每页5个.因此,尽管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        
                    {?>

那我怎么能
 a)以从循环内部删除第二个查询的方式编写SQL或
 b)将结果合并到一个数组中
无论哪种方式,我都需要能够访问数据,以便可以正确格式化页面输出的格式,即在循环内.

解决方法:

我不认为您的方法如此糟糕,也不会改变它.但是,作为练习,如果选择论坛(与组一起加入)并按组ID进行排序,则可以在一个查询中完成所有操作.这样,您只需做出一个选择就可以开始循环.在循环中,您将检查group_id是否已更改.如果有,则开始一个新的组头.

如果这是一个超高流量站点,您还可以研究缓存,以便在页面建立后将其写入磁盘.

这是一个如何检测组更改的示例:

$currentGroupId = 0;
$firstTime = true;
while ($row = mysql_query_fetch_assoc($res)) {
    if ($row['group_id'] != $currentGroupId) {
        $currentGroupId = $row['group_id'];
        if (!$firstTime) {
            // echo close group html
        } else {
            $firstTime = false;
        }
        // echo open group html
    }

    // do forum stuff
}
// echo close group html
上一篇:PHP-将树状对象结构转换为数组并插入整个对象


下一篇:mysql计算两个日期的差(天、小时、分、秒)