如何将一个查询的结果传递给第二个查询并将结果显示在一个表中?

Posted

技术标签:

【中文标题】如何将一个查询的结果传递给第二个查询并将结果显示在一个表中?【英文标题】:How can I pass results from one query into a second query and display the results in one table? 【发布时间】:2015-11-11 11:30:41 【问题描述】:

我正在使用 Codeigniter 并试图将一个查询的结果传递到第二个。我收到错误

“致命错误:不能使用 CI_DB_mysql_result 类型的对象作为数组”。

任何建议将不胜感激。 对于我的 $truck_num 查询,我只是在名为 truck_num 的字段中获取卡车列表。然后,我尝试将这些结果传递到执行一些计算的查询中。

控制器 ///////////

    function average_battery_life_by_truck() 

    $truck_num = $this->mhedash_model->select_truck();

    foreach($truck_num->result_array() as $row) 
    $array = $row['truck_num']; 
    $results[] = $this->mhedash_model->select_battery_life_truck($array);

    

    $data['array'] = $results;

    $data['main_content'] = 'mhe/average_truck_bat';
    return $this->load->view('includes/template',$data);




查看 //////

<?php error_reporting (E_ALL ^ E_NOTICE); ?>

<p><h1></h1></p>


<FORM 
<></div>
<br />
<p><h4 id="date"></h4></p>
<h3></h3>
<table id="table" class="sortable">
<THEAD>
    <TR>
        <TH>Truck</TH>
        <TH>Average Hours</TH>

    </TR>
</THEAD>

<TBODY>
    <?php $count = 0; ?>
<?php foreach($array as $row): ?>

    <TR >
        <TD><?php echo $row['average_bat_life']; ?></TD>
        <TD><?php echo $row['truck_num']; ?></TD>

    </TR>
    <?php $count++; ?>

<?php endforeach;?>
</TBODY>

</table>

型号/////

    function select_truck() 
    mysql_select_db('battery');
    $this->table_name = 'truck';


    $truck_num = "SELECT 
                    truck_num
                  FROM 
                    truck
                  WHERE 
                    battery_type_id = '5'
                    or battery_type_id = '8'
                    or battery_type_id = '10'
                    or battery_type_id = '9'
                  ORDER BY truck_num
              ";

             return $this->db->query($truck_num);


function select_battery_life_truck($data) 
    mysql_select_db('battery');
    $this->table_name = 'truck_hours';
    $truck_num = $this->db->escape($data);


    /*This query takes the current row's metered hours and subtracts it with the previous row's metered hours.
    We then average out the time the battery was on the truck for the date range */


    $query = "SELECT 
                ROUND(AVG(metered_hours-b),2) average_bat_life,
                truck_num
              FROM   (SELECT
                        id,
                        metered_hours,
                        loc_id,
                            (SELECT MAX(metered_hours) 
                             FROM 
                                (SELECT @rownum:=@rownum+1 id, truck_hours.metered_hours,truck_hours.loc_id from truck_hours,truck, (SELECT @rownum:=0) r where truck_hours.loc_id = truck.loc_id and truck.truck_num = $truck_num and DATE_SUB(CURDATE(),INTERVAL 30 DAY) >= truck_hours.ctrl_date  ) a 
                                 WHERE a.metered_hours < t.metered_hours)b

                                 FROM 
                            (SELECT @rownum:=@rownum+1 id, truck_hours.metered_hours,truck_hours.loc_id from truck_hours,truck, (SELECT @rownum:=0) r where truck_hours.loc_id = truck.loc_id and truck.truck_num = $truck_num and DATE_SUB(CURDATE(),INTERVAL 30 DAY) >= truck_hours.ctrl_date ) AS t) c,
                            truck

              WHERE c.loc_id = truck.loc_id 
              ORDER BY average_bat_life";
    return $this->db->query($query);

【问题讨论】:

你的模型文件在哪里??? 我刚刚添加了它。对此感到抱歉。 在你看来你使用foreach($array-&gt;result_array() as $row) hm 没有骰子,它返回致命错误:在我的视图第 24 行的非对象上调用成员函数 result_array(),这是 foreach 行。 值得一提的是,我刚刚从控制器中的 $results 中删除了括号 [ ],它给了我一个空行表并且没有错误。我可以看到 mysql 数据运行但没有显示在页面上。在我的视图中测试了 result_array 之后,我这样做了。 【参考方案1】:

在您的第二个查询中,您没有从数据库中获取数据。

所以你需要添加 fetch 方法

在你的控制器中

foreach($truck_num->result_array() as $row) 
    $array = $row['truck_num']; 
    $result = $this->mhedash_model->select_battery_life_truck($array);
    foreach($result->result_array() as $row_data) 
         $results[] = $row_data; 
    
    
      $data['array'] = $results;
      $data['main_content'] = 'mhe/average_truck_bat';
      $this->load->view('includes/template',$data);

【讨论】:

我认为这已经非常接近完成了。使用您的新代码,它会运行查询并按预期返回表中的 116 行。表格字段都是空白的,但这是一个巨大的进步。 很高兴知道它会帮助您消除错误!! 它正在工作。我在控制器和视图上将 $row['truck_num'] 设为大写,对 $row['average_bat_life'] 也是如此。你真棒。

以上是关于如何将一个查询的结果传递给第二个查询并将结果显示在一个表中?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel中的MySQL子查询,如何加入查询并将第二个查询的结果作为新列添加到第一个查询?

Swift 3:如何动态加载图像并将变量传递给第二个视图控制器?

无法快速显示第一个视图控制器将值传递给第二个视图控制器

多重突变:如何让第一个突变将 ID 传递给第二个突变

如何将值传递给第二个控制器

如何根据第一个查询结果执行第二个查询