mysql to codeigniter помощь активной записи - PullRequest
1 голос
/ 15 января 2011

Активная запись - это понятие neet, но иногда мне трудно заставить работать более сложные запросы.Я считаю, что это как минимум одно место, в котором отсутствуют документы по КИ.

Во всяком случае, это SQL я написал.Он возвращает ожидаемые результаты квестов, еще не выполненных пользователем, которые разблокированы, и в соответствии с требованиями уровня пользователя:

SELECT writing_quests . * 
FROM  `writing_quests` 
LEFT OUTER JOIN members_quests_completed ON members_quests_completed.quest_id = writing_quests.id
LEFT OUTER JOIN members ON members.id = $user_id
WHERE writing_quests.unlocked =1
AND writing_quests.level_required <= $userlevel
AND members_quests_completed.user_id IS NULL 

Это запрос активной записи codeigniter, он возвращает все квесты, которые разблокированы и находятся в пределахтребование к уровню пользователя:

$this->db->select('writing_quests.*');
$this->db->from('writing_quests');
$this->db->join('members_quests_completed', 'members_quests_completed.quest_id = writing_quests.id', 'left outer');
$this->db->join('members', "members.id = $user_id", 'left outer');
$this->db->where('writing_quests.unlock', 1);
$this->db->where('writing_quests.level_required <=', $userlevel);   
$this->db->where('members_quests_completed.user_id is null', null, true);

Я предполагаю, что что-то не так с тем, как я запрашиваю Null.Если быть точным, я решил включить все.

Ответы [ 3 ]

0 голосов
/ 16 января 2011

Иногда CI делает это немного сложнее ... вы всегда можете использовать $ this-> db-> query («ваш очень длинный запрос»), чтобы немного упростить (если я правильно помню, строки по-прежнему экранированы - не уверен),Это личное мнение.

0 голосов
/ 01 февраля 2013
$this->db->where('column IS NOT NULL')

в вашем случае

$this->db->where('members_quests_completed.user_id is not null');
0 голосов
/ 15 января 2011

Я согласен, что иногда активная запись CI может усложнять ситуацию. Попробуйте это для предложения IS NULL where:

$this->db->where('members_quests_completed.user_id IS ','NULL',false);

Попробуйте также включить профилировщик или повторить сгенерированный запрос с помощью:

echo $this->db->last_query();

Это может пролить некоторый свет на проблему.

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