У меня есть следующий запрос mysql. Не могли бы вы рассказать мне, как написать тот же запрос в Codeigniter?
SELECT * FROM myTable
WHERE trans_id IN ( SELECT trans_id FROM myTable WHERE code='B')
AND code!='B'
У меня есть следующий запрос mysql. Не могли бы вы рассказать мне, как написать тот же запрос в Codeigniter?
SELECT * FROM myTable
WHERE trans_id IN ( SELECT trans_id FROM myTable WHERE code='B')
AND code!='B'
Вы можете использовать метод sub query codeigniter, чтобы сделать это для этой цели, вам придется взломать codeigniter. как это
Перейти к системе /database/DB _active_rec.php
Удалите общедоступное или защищенное ключевое слово из этих функций.
public function _compile_select($select_override = FALSE)
public function _reset_select()
Теперь запись в подзапросах доступна И теперь вот ваш запрос с активной записью
$this->db->select('trans_id');
$this->db->from('myTable');
$this->db->where('code','B');
$subQuery = $this->db->_compile_select();
$this->db->_reset_select();
// And now your main query
$this->db->select("*");
$this->db->where_in("$subQuery");
$this->db->where('code !=', 'B');
$this->db->get('myTable');
И дело сделано. Ура!!!
Примечание. При использовании подзапросов вы должны использовать
$this->db->from('myTable')
вместо
$this->db->get('myTable')
который выполняет запрос.
Смотрите это тоже
Как я могу переписать этот SQL-код в Active Records CodeIgniter?
Примечание. В Codeigntier 3 эти функции уже общедоступны, поэтому вам не нужно их взломать.
$data = $this->db->get_where('columnname',array('code' => 'B'));
$this->db->where_in('columnname',$data);
$this->db->where('code !=','B');
$query = $this->db->get();
return $query->result_array();
Попробуйте следующее:
$this->db->select("*");
$this->db->where_in("(SELECT trans_id FROM myTable WHERE code = 'B')");
$this->db->where('code !=', 'B');
$this->db->get('myTable');
Примечание: $this- > db- > select ( "*" ); является необязательным, когда вы выбираете все столбцы из таблицы
попробуйте следующее:
return $this->db->query("
SELECT * FROM myTable
WHERE trans_id IN ( SELECT trans_id FROM myTable WHERE code='B')
AND code!='B'
")->result_array();
Не активна запись, но есть метод codeigniter http://codeigniter.com/user_guide/database/examples.html см. раздел "Стандартный запрос с несколькими результатами (версия массива)"