ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-10-24 05:17:01  阅读:97  来源: 互联网

标签:loops mysql 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

标签:loops,mysql,php
来源: https://codeday.me/bug/20191024/1918285.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有