Php 如何将一个查询的结果传递到第二个查询,并在一个表中显示结果?
我正在使用Codeigniter,并试图将一个查询的结果传递到另一个查询。我收到了错误 致命错误:无法将CI\u DB\u mysql\u类型的对象用作数组 如有任何建议,将不胜感激。 对于$truck_num查询,我只是在一个名为truck_num的字段中获取一个卡车列表,然后尝试将这些结果传递到一个进行一些计算的查询中 控制器 ///////////Php 如何将一个查询的结果传递到第二个查询,并在一个表中显示结果?,php,mysql,codeigniter,foreach,Php,Mysql,Codeigniter,Foreach,我正在使用Codeigniter,并试图将一个查询的结果传递到另一个查询。我收到了错误 致命错误:无法将CI\u DB\u mysql\u类型的对象用作数组 如有任何建议,将不胜感激。 对于$truck_num查询,我只是在一个名为truck_num的字段中获取一个卡车列表,然后尝试将这些结果传递到一个进行一些计算的查询中 控制器 /////////// function average_battery_life_by_truck() { $truck_num = $this-
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);
}
看法
//////
模型/////
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);
}
在第二个查询中,您并没有从数据库中获取数据 所以您需要添加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);
你的模型文件在哪里???我刚刚添加了它。对此很抱歉。在您的视图中,您使用foreach$array->result\u array作为$row{hm no dice,它返回致命错误:在我的视图的第24行(foreach行)的非对象上调用成员函数result\u array。可能值得一提的是,我刚刚删除了括号[]从控制器中的$results中,它给了我一个空行表,没有错误。我可以看到mysql数据运行了,但没有显示在页面上。我在视图中测试了result_数组后这样做。我认为这非常接近完成。使用新代码,它运行查询,并按预期返回表中的116行。表字段s都是空白的,但这是一个巨大的进步。很高兴知道它将帮助您删除错误!!它现在正在工作。我在控制器和视图上使用了我的$row['truck\u num']大写字母,对$row['average\u bat\u life']也做了同样的操作。你太棒了。
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);