Как всегда мало водного текста, сразу код, ниже немного разъяснения по нему
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();