2015-10-21 2 views
0

В настоящее время я собираюсь создать небольшую игру, чтобы узнать, какая активная запись (codeigniter) и php. Поэтому я совершенно новичок в этом.Codeigniter, активная запись, присоединение

И, конечно, я столкнулся со следующей проблемой на дороге.

Задача состоит в том, у меня есть две таблицы, User_Heroes и Герои. Таблица Герои содержит всех героев, которые пользователь может выбрать в свое время, играя в игру (принадлежащую его фракции) и User_Heroes - таблица героев, которую пользователь уже нанял на службу.

Вещь, которую я хочу сделать, заключается в следующем: я хочу сделать запрос, который возвращает список героев, которых у текущего пользователя нет в его работе.

Чтобы просто получить их все, что я хотел бы сделать это

public function get_faction_heroes($sUser, $hero_faction){ 
     $oQuery = $this -> db 
         -> select(' id, 
            hero_name, 
            hero_faction, 
            hero_type, 
            hero_cost, 
            hero_maintenance, 
            hero_allowed') 
         -> like('hero_faction',$hero_faction) 
         -> get('heroes') 
         -> result(); 

     return $oQuery; 
    } 

В настоящее время у меня есть следующий запрос строить, но очевидно, что это не так, как он не возвращает список, как я ожидаю, что это вернется.

public function get_faction_heroes($sUser, $hero_faction){ 
    $oQuery = $this -> db 
        -> select(' h.id, 
           h.hero_name, 
           h.hero_faction, 
           h.hero_type, 
           h.hero_cost, 
           h.hero_maintenance, 
           h.hero_allowed') 
        -> like('h.hero_faction',$hero_faction) 
        -> where_not_in('u.hero_id', $sUser) 
        -> where('h.hero_allowed >', 1) 
        -> join('user_heroes u', 'u.hero_id = h.id', 'left') 
        -> get('heroes h') 
        -> result(); 

    return $oQuery; 
} 

Как вы могли заметить, некоторым героям разрешено набирать несколько раз (hero_allowed> 1).

Возможно, в дальнейшем очистить таблицу я добавил два изображения с текущими таблицами

enter image description here

enter image description here

+0

я думаю, вы должны использовать право присоединиться (не слева) –

+0

Уже попробовал это, к сожалению, это не проблема :( –

+0

использовать $ this-> db-> last_query(); чтобы получить последний запрос, который был запущен после этого, вам нужно играть с запросом в phpmyadmin или аналогичном приложении mysql, чтобы получить des ired проблема. На самом деле ваша проблема не переписывается в код, связанный с запросом. – siddhesh

ответ

1
$this->db->select('*')->from('Heroes'); 
$this->db->where('`id` NOT IN (SELECT `hero_id` FROM `User_Heroes`)', NULL, FALSE); 
$query=$this->db->get(); 
return $query->result(); 
+0

О, что все делает то, что я хочу, единственное, что мне нужно проверить сейчас если героя в списке разрешено более одного раза. –

+0

Затем вы просто добавляете еще одну строку после условия 'where', которая подобна этому' $ this-> db-> где ('Heros.is_allowed>', '1') ' –

+0

Я гонь изменяю способ, которым это работает, так как герой - герой, а может быть только один, лакей - это просто хрюканье, и у вас может быть много больше, чем просто 5 или 6 и т. д. , но спасибо за понимание: D –

Смежные вопросы