如何将一个查询的结果传递给第二个查询并将结果显示在一个表中?
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->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子查询,如何加入查询并将第二个查询的结果作为新列添加到第一个查询?