Codeigniter активная запись с несколькими лайками или - PullRequest
2 голосов
/ 16 августа 2010

Эй ... Я столкнулся с проблемой, используя несколько "лайков" в моем sql-запросе (сгенерированном с помощью activerecord Codeigniter):

SELECT * FROM (`posts`) WHERE `city` LIKE '%test%' AND `title` LIKE '%%' OR `text` LIKE '%%'

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

Как я могу добиться этого с помощью класса Active Record Codeigniter?

Текущий код: if ($ type! = 0) $ this-> db-> where ('type', $ type);

    $this->db->like('city', $area);
    $this->db->like('title', $words);
    $this->db->or_like('text', $words);

    return $this->db->get('posts')->result_array(); 

Ответы [ 4 ]

16 голосов
/ 03 мая 2015

Предыдущий ответ правильный.Я хотел бы добавить следующее ...

В Codeigniter, поддерживающем следующее общее ...

$this->db->like();
$this->db->or_like();
$this->db->not_like();
$this->db->or_not_like();

Надеюсь, это кому-нибудь поможет.

4 голосов
/ 16 августа 2010

Я не думаю, что КИ добавляет какой-либо паратез.Это добавит «И» между первыми двумя операторами и «ИЛИ» между последними двумя.Чтобы добиться того, чего вы хотите, я бы написал собственное заявление.Это очень просто.

$sql = SELECT * FROM 'posts' WHERE city LIKE ? AND ( title LIKE ? OR text LIKE ? );
$query = $this->db->query($sql, array($area, $words, $words));

Обратите внимание, как я использовал привязку.Это автоматически экранирует символы для вас.

1 голос
/ 14 апреля 2017

это сделает свое дело

$this->db->select('*')->from('my_table')
        ->group_start()
                ->where('a', 'a')
                ->or_group_start()
                        ->where('b', 'b')
                        ->where('c', 'c')
                ->group_end()
        ->group_end()
        ->where('d', 'd')
->get();

// Generates:
// SELECT * FROM (`my_table`) WHERE ( `a` = 'a' OR ( `b` = 'b' AND `c` = 'c' ) ) AND `d` = 'd'
0 голосов
/ 18 сентября 2017

, когда вам также нужно использовать присоединение к таблице, попробуйте следующий метод

public function get_all_airports($para) {

        $this->db->select('airports.name as air_name, airports.city, airports.type, airports.home_link, country.name as con_name');
        $this->db->from('airports');

        $this->db->join('country', 'airports.iso_country = country.code', 'inner');

        $this->db->where("airports.type !=", "small_airport");
        $this->db->where("airports.type !=", "closed");
        $this->db->where("airports.type !=", "heliport");
        $this->db->where("airports.type !=", "medium_airport");
        $this->db->where("airports.type !=", "seaplane_base");

        $where = "(country.name LIKE '%$para%' OR airports.city LIKE '%$para%')";
        $this->db->where($where);

        echo json_encode($this->db->limit(20)->get()->result());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...