8 ответов:
->where()поддержка передачи любой строки к нему, и он будет использовать его в запросе.вы можете попробовать использовать это:
$this->db->select('*')->from('certs'); $this->db->where('`id` NOT IN (SELECT `id_cer` FROM `revokace`)', NULL, FALSE);The
,NULL,FALSEнаwhere()говорит CodeIgniter не избегать запроса,который может испортить его.обновление: вы также можете проверить библиотека подзапрос я писал.
$this->db->select('*')->from('certs'); $sub = $this->subquery->start_subquery('where_in'); $sub->select('id_cer')->from('revokace'); $this->subquery->end_subquery('id', FALSE);
функции
_compile_select()и_reset_select()устарели.
Вместо этого используйтеget_compiled_select():#Create where clause $this->db->select('id_cer'); $this->db->from('revokace'); $where_clause = $this->db->get_compiled_select(); #Create main query $this->db->select('*'); $this->db->from('certs'); $this->db->where("`id` NOT IN ($where_clause)", NULL, FALSE);
активные записи CodeIgniter в настоящее время не поддерживают подзапросы, однако я использую следующий подход:
#Create where clause $this->db->select('id_cer'); $this->db->from('revokace'); $where_clause = $this->db->_compile_select(); $this->db->_reset_select(); #Create main query $this->db->select('*'); $this->db->from('certs'); $this->db->where("`id` NOT IN ($where_clause)", NULL, FALSE);_compile_select() и _reset_select () - это два недокументированных метода (AFAIK), которые компилируют запрос и возвращают sql (без его запуска) и сбрасывают запрос.
в основном запросе FALSE в предложении where говорит codeigniter не избегать запроса (или добавлять обратные палочки и т. д.), которые испортили бы запрос. (Значение NULL просто потому, что предложение where имеет необязательный второй параметр, который мы не используем)
однако вы должны знать, поскольку _compile_select() и _reset_select () не являются документированными методами, возможно, что функциональность (или существование) может измениться в будущих выпусках.
это может быть немного поздно для исходного вопроса, но для будущих запросов это может помочь. Лучший способ добиться этого Получить результат внутреннего запроса к массиву, как это
$this->db->select('id'); $result = $this->db->get('your_table'); return $result->result_array();а затем использовать than array в следующем предложении active record
$this->db->where_not_in('id_of_another_table', 'previously_returned_array');надеюсь, что это помогает
запрос:
SELECT * FROM (SELECT id, product FROM product) as productвы можете использовать:$sub_query_from = '(SELECT id, product FROM product ) as product'; $this->db->select(); $this->db->from($sub_query_from); $query = $this->db->get()обратите внимание, что в строке sub_query_from необходимо использовать пробелы между
... product ) as...
$this->db->where('`id` IN (SELECT `someId` FROM `anotherTable` WHERE `someCondition`='condition')', NULL, FALSE);
Я думаю, что этот код будет работать. Я не знаю, является ли это приемлемым стилем запроса в CI, но он отлично работает в моей предыдущей проблеме. :)
$subquery = 'SELECT id_cer FROM revokace'; $this->db->select('*'); $this->db->where_not_in(id, $subquery); $this->db->from('certs'); $query = $this->db->get();
$where.= '('; $where.= 'admin_trek.trek='."%$search%".' AND '; $where.= 'admin_trek.state_id='."$search".' OR '; $where.= 'admin_trek.difficulty='."$search".' OR '; $where.= 'admin_trek.month='."$search".' AND '; $where.= 'admin_trek.status = 1)'; $this->db->select('*'); $this->db->from('admin_trek'); $this->db->join('admin_difficulty',admin_difficulty.difficulty_id = admin_trek.difficulty'); $this->db->where($where); $query = $this->db->get();
Comments