obteniendo tres registros en orden descendente de cada categoría usando codeigniter

Tengo dos categorías y quiero buscar tres registros de cada categoría más tarde. Encontré este enlace de consulta UNION con el patrón de registro activo de codeigniter después de esto. Cambié mi archivo DB_Active_rec y agregué este código también.

var $unions = array(); public function union_push($table = '') { if ($table != '') { $this->_track_aliases($table); $this->from($table); } $sql = $this->_compile_select(); array_push($this->unions, $sql); $this->_reset_select(); } public function union_flush() { $this->unions = array(); } public function union() { $sql = '(' . implode(') union (', $this->unions) . ')'; $result = $this->query($sql); $this->union_flush(); return $result; } public function union_all() { $sql = '(' . implode(') union all (', $this->unions) . ')'; $result = $this->query($sql); $this->union_flush(); return $result; } 

y luego creo una consulta basada en función codeigniter como esta

 $this->db->select("*"); $this->db->from("media m"); $this->db->join("category c", "m.category_id=c.id", "INNER"); $this->db->order_by("m.media_files", "DESC"); $this->db->limit(3); $this->db->union_push(); $this->db->select("*"); $this->db->from("media m"); $this->db->join("category c", "m.category_id=c.id", "INNER"); $this->db->order_by("m.media_files", "DESC"); $this->db->limit(3); $this->db->union_push(); $getMedia = $this->db->union_all(); 

crea esto

 (SELECT * FROM media m INNER JOIN category c ON m.category_id = c.id ORDER BY m.media_files DESC LIMIT 3) UNION ALL (SELECT * FROM media m INNER JOIN category c ON m.category_id = c.id ORDER BY m.media_files DESC LIMIT 3) 

Ahora está buscando registros pero no de forma adecuada Quiero usar solo la consulta, que muestra seis registros primero consulta buscar registros 3 y segunda consulta recuperar tres registros ahora los registros son duplicados Verifico el ID de registros es 6,5,4 y nuevamente 6 , 5,4. También se puede hacer por PHP pero quiero usar la consulta. Gracias por adelantado

No conozco el encendedor de código, pero básicamente quiere que primero haga la unión y luego aplique la orden por todo el conjunto. Esto requeriría una subconsulta. Debería dar como resultado la siguiente consulta SQL:

 select * from ((SELECT * FROM media m INNER JOIN category c ON m.category_id = c.id ) UNION ALL (SELECT * FROM media m INNER JOIN category c ON m.category_id = c.id)) T ORDER BY m.media_files DESC LIMIT 3 

Espero que te ayude a algunos.