2

我有一个表单,在该表单上,我对不同的框进行了多选,并且对于框,在数据库中存在一些记录,即(框的开口数),但是对于选定的框,可能不存在任何记录,即(框甚至一次都没有打开)。目前,当我选择不同的框并且如果某个框不存在记录时,它不会返回该框的空数组,我希望它甚至返回所选框的空结果。我的查询是

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] => 
    )

对于没有记录的那些,我如何获取所有带有空数组的选定框的记录。

谢谢

4

1 回答 1

0

这里的问题很明显:当用户打开框时,您只在该表中插入一行。如果盒子没有打开过,该表不包含该盒子的记录。

如果您然后执行select * from table where id in (1, 2, 3, 4, 5)但您的表仅包含 id 2 和 3 的行,则结果集将仅包含 id 2 和 3 的数据,因为没有找到其他 id 的记录。

我想您只能在循环中为每个$box_idfrom调用此查询$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;
}

但这不是很好,因为您对每个盒子执行一个查询,当有很多盒子时,这将非常消耗资源......

于 2012-06-12T13:59:47.160 回答