【问题标题】:Foreach loop with two queries inside内部有两个查询的 Foreach 循环
【发布时间】:2016-06-13 06:49:58
【问题描述】:

我有两个运行良好的查询,每个查询将检索 3 行。我正在尝试使用 foreach 在表上显示查询结果,并在 foreach 循环内进行两(2)个查询。我尝试将两个 result() 放在 foreach 上,但它是一个错误。如何在单个 foreach 循环中显示两个 result()?我不知道我怎样才能做到这一点。

查询 1 将位于“投资者名称”列,然后查询 2 将位于“金额”列。

代码如下:

<?php

    $query5 = $this->db->query("SELECT * FROM ".tbl_investors." WHERE id IN (SELECT MAX(investor_id) FROM ".tbl_investors_ledger." GROUP BY investor_id ) AND deleted = 0");

    $query6 = $this->db->query("SELECT * FROM ".tbl_investors_ledger." WHERE id IN (SELECT MAX(id) FROM ".tbl_investors_ledger." GROUP BY investor_id ) AND deleted = 0");

?>

                    <table class="table table-striped table-bordered table-hover" id="dataTables">
                        <thead>
                            <tr>  
                                <td>Investor Name</td>
                                <td>Amount</td>
                          </tr>
                        </thead>
                        <tbody style="text-align: center;">

                                <?php
                                foreach ($query5->result() as $row) && ($query6->result() as $row2){
                                ?>
                                <tr>
                                    <td><?php echo $row->last_name.', '.$row->first_name; ?></td>
                                    <td><?php echo $row2->amount; ?></td>
                                </tr>
                                <?php } ?>

                        </tbody>
                    </table>

【问题讨论】:

    标签: php mysql foreach


    【解决方案1】:

    您不能在 foreach 循环中使用两个数组表达式。最好在查询中使用join 使其成为一个。像

    $query = "SELECT `tbl_investors`.* , `tbl_investors_ledger`.*  
     FROM `tbl_investors` 
     LEFT JOIN  `tbl_investors_ledger` 
     ON `tbl_investors`.id = `tbl_investors_ledger`. investor_id 
     WHERE `tbl_investors`.deleted = 0 AND `tbl_investors_ledger`.deleted = 0 
     GROUP BY `tbl_investors_ledger`.investor_id 
     ORDER BY `tbl_investors_ledger`.id DESC ";
    

    【讨论】:

      【解决方案2】:

      据我所知,foreach 循环只能处理一个查询。我看到了两个选项,真的..

      选项 1

      创建两个不同的 foreach 循环,不要在彼此内部,因为那样会产生双重结果,而是在彼此外部。这可能达不到您想要的效果,但值得一试,如下所示:

      <!-- FIRST LOOP -->
      
      <?php 
      foreach ($query5->result() as $row) {
      ?>
      
        <td> Your data goes here </td>
      
      <?php 
      }
      ?>
      
      <!-- SECOND LOOP -->
      
      <?php 
      foreach ($query6->result() as $row) {
      ?>
      
        <td> Your data goes here </td>
      
      <?php 
      }
      ?>
      

      选项 2

      使用“JOIN”只创建一个查询,只需要一个循环

      this post查看答案

      【讨论】:

      • 当我尝试选项2时,行和列没有排列,感谢您对选项2的建议
      • @zen 如果您需要每列排列它们,例如按字母顺序排列名称,只需在查询末尾添加“ORDER BY [columnname] descending”(即使我看到您已经得到了答案,我想在这里添加)
      猜你喜欢
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多