Как всегда мало водного текста, сразу код, ниже немного разъяснения по нему
$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');
$this->db->set_dbprefix($dbprefix);
$this->db->join("lessons", "lessons.lesson_id = schedule_tmp.lesson_id", "left")
->join("students", "schedule_tmp.class_id = students.class_id")
->where("schedule_tmp.class_id", $class_id)
->where("schedule_tmp.date_approve <", "2012-06-29 14:59:00")
->group_by("schedule_tmp.dayofweek, schedule_tmp.lesson_number");
$query = $this->db->get();
return $query->result();
В результате получим вот такой вот запрос
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();