У меня две категории, и я хочу получить три записи каждой категории позже. Я нашел этот запрос UNION запроса с активным типом записи codeigniter после этого, я меняю файл DB_Active_rec и добавляю этот код также
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; }
и затем я создаю запрос на основе функции codeigniter, подобный этому
$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();
создать это
(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)
Теперь он извлекает записи, но не правильно Я хочу использовать только запрос, он показывает шесть записей первый запрос выборка 3 записи и второй запрос выборка три записи теперь записи дублируются Я проверяю идентификатор записей 6,5,4 и снова 6 , 5,4. Это можно сделать и PHP
но я хочу использовать запрос. заранее спасибо
Я не знаю код-воспламенитель, но в основном вы хотите, чтобы он сначала сделал объединение, а затем применил порядок по всему набору. Для этого потребуется подзапрос. Это должно привести к следующему 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
Надеюсь, это поможет вам.