Вложеный запрос в codeignator

Как всегда мало водного текста, сразу код, ниже немного разъяснения по нему

1
2
3
4
5
6
7
8
9
10
11
    $this->db->select("*")
            ->from("schedule")
            ->order_by("schedule.dayofweek", "asc")
            ->order_by("schedule.lesson_number", "asc")
            ->order_by("date_approve", "desc");
    $s = $this->db->_compile_select();
    $this->db->_reset_select();
    $dbprefix = $this->db->dbprefix;
    $this->db->set_dbprefix('');
    $this->db->select("*")
            ->from('(' . $s . ') as ' . $this->db->dbprefix . 'schedule_tmp'); <a href="http://my-opinions.info/codeigniter/vlozhenyj-zapros-v-codeignator#more-171" class="more-link">Читать далее <span class="screen-reader-text">Вложеный запрос в codeignator</span></a>

В результате получим вот такой вот запрос

1
2
3
4
5
6
7
8
9
      SELECT * FROM (
      SELECT * FROM `uw_schedule` ORDER BY  `uw_schedule`.`dayofweek` ASC, `uw_schedule`.`lesson_number` ASC, `uw_schedule`.`date_approve` DESC
      ) AS uw_schedule_tmp
 
      LEFT JOIN `uw_lessons` ON `uw_lessons`.`lesson_id` = `uw_schedule_tmp`.`lesson_id`
      LEFT JOIN `uw_students` ON `uw_schedule_tmp`.`class_id` = `uw_students`.`class_id`
      WHERE `uw_schedule_tmp`.`class_id` = 0
      AND `uw_schedule_tmp`.`date_approve` < '2012-06-29 14:59:00'
      GROUP BY uw_schedule_tmp.dayofweek, uw_schedule_tmp.lesson_number

Скорее всего вы столкнетесь с проблемой что методы
_compile_select();
_reset_select();
protected, а соответственно их можно использовать только в нутри класса, честно говоря не разберался как обойти эту ситуацию и просто поменял их в ядре на public, если кто разберется, напишите пожалуйста, исправлю статью, и себе на заметку.. )

И так теперь по коду,
$this->db->dbprefix Получает текущий префикс, если Вам он не нужен то можно пропустить использования этого метода
_compile_select() Возращает запрос в переменую
_reset_select();