我有一个表单,我有一个多选用于不同的盒子和盒子,在数据库中存在一些记录,即(盒子的开口数量)但是对于选定的盒子可能没有记录存在,即(盒子甚至没有打开一次)。目前,当我选择不同的盒子并且如果盒子不存在记录时,它不返回该盒子的空数组,我想它甚至返回所选盒子的空结果。我的问题是
public function getBoxOpenings($boxes, $from_date, $to_date){
$query = $this->db->select('box_id, COUNT(box_id) AS Openings')
->from('boxes')
->where_in('box_id', $boxes)
->where('actiontime >=', $from_date)
->where('actiontime <=', $to_date)
->group_by('box_id')
->get();
$data = $query->result_array();
return $data;
}
如果我选择3个框并提交表格并且只有2个框存在记录,则返回类似
的内容 Array
(
[0] => Array
(
[mc_boxes_idmc_boxes] => 12
[location] => FRA-Air
[Openings] => 1
)
[1] => Array
(
[mc_boxes_idmc_boxes] => 14
[location] => FRA-Hof
[Openings] => 1
)
)
如何获得所有三个记录,如此
[2] => Array
(
[mc_boxes_idmc_boxes] => 16
[location] => Test
[Openings] =>
)
如何为那些没有记录的空数组获取所有选定框的记录。
由于
答案 0 :(得分:0)
这里的问题很明显:当用户打开该框时,您只在该表中插入一行。如果该表未打开,则该表不包含该框的记录。
如果您然后执行select * from table where id in (1, 2, 3, 4, 5)
但是您的表仅包含ids 2和3的行,则结果集将仅包含ids 2和3的数据,因为没有找到其他ID的记录。 / p>
我猜你只能在$box_id
的每个$boxes
的循环中调用此查询 - 当找到数据时返回它,否则返回零。像这样:
public function getBoxOpenings($boxes, $from_date, $to_date){
$data = array();
foreach($boxes as $box) {
$query = $this->db->select('box_id, COUNT(box_id) AS Openings')
->from('boxes')
->where('box_id = ', $box)
->where('actiontime >= ', $from_date)
->where('actiontime <= ', $to_date)
->group_by('box_id')
->get();
$res = $query->result_array();
if($res)
$data[] = $res;
else
$data[] = array('box_id' => $box, 'Openings' => 0);
}
return $data;
}
但是这不是很好,因为你在每个盒子里做一个查询,当有很多盒子时会非常耗费资源...