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
    )

)

このように1つが空の状態で3つのレコードすべてを取得するにはどうすればよいですか?

[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のレコードが見つからないため、結果セットにはID2と3のデータのみが含まれます。

$box_idこのクエリは、 fromごとにループで呼び出すことしかできないと思います$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;
}

しかし、これはあまり良くありません。ボックスごとに1つのクエリを実行するため、多くのボックスがある場合は非常にリソースを消費します...

于 2012-06-12T13:59:47.160 に答える