Переход от raw sql к активному классу codeigniters - PullRequest
2 голосов
/ 18 января 2010

У меня есть

SELECT *
FROM categoryTable
WHERE categoryId NOT
IN (

SELECT categoryId
FROM userMenuTable
WHERE cookieId = 'bang4b544417a41b6'
)

, но я хотел бы использовать класс активных записей codeigniters, поэтому, используя синтаксис

$this->db

, я надеялся, что кто-нибудь поможет мне преобразовать это?

Ответы [ 3 ]

6 голосов
/ 19 января 2010

Два способа сделать это:

Простой SQL:

$this->db->query('SELECT * FROM categoryTable WHERE categoryId NOT IN (
    SELECT categoryId FROM userMenuTable WHERE cookieId = "bang4b544417a41b6"
)');

Активная запись + Простой ГДЕ SQL

$this->db->where('categoryId', 'NOT IN (
    SELECT categoryId FROM userMenuTable WHERE cookieId = "bang4b544417a41b6"
)', FALSE);

$this->db->get('categoryTable');

Вы можете поместить простой SQL в предложение WHERE, добавив FALSE в качестве третьего аргумента в db-> where ();

Жаль, что для этого нет ничего лучше, но Active Record предназначен только для простых запросов с объединениями, заказами, лимитами и т. Д.

1 голос
/ 17 июня 2010
$this->db->select('categoryId');
$this->db->where('cookieId','bang4b544417a41b6');
$this->db->from('userMenuTable');
$in_query = $this->db->_compile_select();
$this->db->_reset_select(); // dont forget this!

$this->db->select('field1, field2, field3'); // its a best practice not to use *
$this->db->from('categoryTable');

// look at the 3rd param, if you set it to FALSE, CodeIgniter will not try to protect your field or table names with backticks
$this->db->where("categoryId NOT IN ($in_query)", NULL, FALSE);

$query = $this->db->get();
$result = $query->result();
$query->free_result(); // optional, used when there are many queries
0 голосов
/ 18 января 2010

Это невозможно. Реализация CodeIgniter ActiveRecord не поддерживает вложенные запросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...