2012-06-12 2 views
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] => 
    ) 

Как получить записи для всех выбранных полей с пустыми массивами для тех, у которых нет записей.

Благодаря

+0

является запрос возвращается пустым или NULL? ?? – jcho360

+0

@ jcho360 Он ничего не возвращает –

+0

Он просто игнорирует поле, для которого никаких результатов не возвращается –

ответ

0

Проблема здесь очевидна: Вы только вставить строку в эту таблицу, когда окно открывается пользователем. Если окно не открывается, эта таблица не содержит записей для этого поля.

Если вы делаете select * from table where id in (1, 2, 3, 4, 5), но таблица содержит только строки для идентификаторов 2 и 3, набор результатов будет содержать только данные для идентификаторов 2 и 3, так как для других идентификаторов нет записей.

Я думаю, вы могли бы вызвать этот запрос только в цикле для каждого $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; 
} 

Но это не очень хорошо, как Вы делаете один запрос на каждый ящик, который будет очень ресурсоемкой, имея много коробок ...

+0

похоже, что ваше решение будет работать ... Я дам ему попробуйте в ближайшее время ... спасибо за ответ –

+0

Дайте мне знать, если это не так, попробуем отремонтировать его ... – shadyyx

+0

позвольте мне сделать это сейчас :) –

Смежные вопросы