Codeigniter Активная запись И или комбинации в предложении где с несколькими & вложенными группами - PullRequest
0 голосов
/ 07 декабря 2018

У меня сложный запрос SQL, и я хочу реализовать его через Active Records.Этот запрос имеет несколько предложений AND / OR, сгруппированных вместе с другими критериями.Я просматривал различные статьи, в которых говорилось, что мы можем использовать group_start () и group_end () , но мне интересно, можно ли создать группу внутри другой группы?Результирующие серийные номера должны быть исключены из результирующего набора, который будет создан внешним запросом.На самом деле я пытался использовать Join здесь, но это не сработало.Любая рабочая идея, касающаяся объединений здесь, также будет заметна.

Как вы можете видеть из запроса ниже, я использовал двойные круглые скобки для представления нескольких групп внутри группы.Полученные серийные номера также должны быть исключены из результатов внешнего запроса.Скажите, пожалуйста, каким будет его эквивалентный код активной записи Codeigniter.

select * from table2 WHERE NOT table2.serial IN (select columnname from table where ((col < val and val < col) or (col < val and val < col) or(val=col and val=col)) AND incol=intval AND intcol=intval)

Здесь col - имя столбца, val - значение типа DATE, intval - целочисленное значение

1 Ответ

0 голосов
/ 07 декабря 2018

Попробуйте этот синтаксис

$this->db->select("*")->from("table");
    $this->db->group_start();
        $this->db->group_start();
            $this->db->where("val <",'col');
            $this->db->where("val <",'col');
        $this->db->group_end();
        $this->db->or_group_start();
            $this->db->or_where("val <",'col');
            $this->db->where("val <",'col');
        $this->db->group_end();
        $this->db->or_group_start();
            $this->db->or_where("val ",'col');
            $this->db->where("val ",'col');
        $this->db->group_end();
    $this->db->group_end();
    $this->db->where("incol ",'intval');
    $this->db->where("incol ",'intval');
    $this->db->get();
    $last_query = $this->db->last_query();

    $this->db->select('*')->from('table2');
    $this->db->where_not_in('serial',$last_query);
    $this->db->get();
    echo $this->db->last_query();

Строка запроса, созданная выше:

SELECT * FROM `table2` WHERE
     `serial` NOT IN(
    SELECT columnname FROM `table` WHERE
    (
        (`val` < 'col' AND `val` < 'col') OR
        (`val` < 'col' AND `val` < 'col') OR
        (`val` = 'col' AND `val` = 'col') 
    ) AND `incol` = 'intval' AND `incol` = 'intval'
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...