как получить записи из одного столбца, которого нет в другом столбце codeigniter - PullRequest
2 голосов
/ 13 января 2012

привет, я использую codeigniter, и у меня есть такая таблица

enter image description here

я хочу получить все записи, где значение PreferenceID отсутствует в PreferenceParentID столбце

в этом случае у меня есть таблица фитинга также с EntityID. и PreferenceParentID должен быть != 0

предположим, что я фильтрую по entityID 53

мои результаты должны быть

Couture , Denims

потому что PreferenceID не в PreferenceParentID в обоих случаях. Я пытался с where_not_in(), но не мог сделать. пожалуйста помогите

это мой запрос

    $table = $this->mastables['shop_profile_preferences'];
    $this->db->select('a.ProfilePreferenceID');
    $this->db->from($table." as a");

    $where2 = "(SELECT a.PreferenceParentID FROM ".$table.")";
    $this->db->where_not_in('a.PreferenceID', $where2);

    $this->db->where("a.EntityID",$shop_id);
    $this->db->where('a.PreferenceParentID !=',0);

    $query=$this->db->get();

    if($query->num_rows()>0)
    {
        return $query->result_array();
    }
    else
    {
        return FALSE;
    }

результат моего запроса

Array
(
    [0] => Array
        (
            [ProfilePreferenceID] => 274
        )

    [1] => Array
        (
            [ProfilePreferenceID] => 275
        )

    [2] => Array
        (
            [ProfilePreferenceID] => 276
        )

)

как правильно использовать where_not_in(). или идентифицирует там любые другие методы. пожалуйста помоги ..... заранее спасибо.

UPDATE

    $table = $this->mastables['shop_profile_preferences'];
    $this->db->select('a.ProfilePreferenceID,a.ProfilePreferenceValue');
    $this->db->from($table." as a");

    $this->db->where('a.PreferenceParentID !=',0);
    $this->db->where('a.PreferenceID NOT IN (SELECT a.PreferenceParentID FROM '.$table.')', NULL, FALSE);
    $this->db->where("a.EntityID",$shop_id);

    $query=$this->db->get();

    if($query->num_rows()>0)
    {
        return $query->result_array();
    }
    else
    {
        return FALSE;
    }

1 Ответ

4 голосов
/ 13 января 2012

Вы не можете сделать это с where_not_in() CodeIgniter. Потому что второй аргумент должен быть массивом, а не такой строкой.

Вместо этого вы можете использовать обычный метод where().

$this->db->where('a.PreferenceID NOT IN (SELECT a.PreferenceParentID FROM `table_name`)', NULL, FALSE);

На случай, если вам интересно, третий аргумент в приведенном выше коде состоит в том, чтобы не допустить попытки CodeIgniter защитить поле и имя таблицы обратными чертами.

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