Codeigniter活动记录有几个像或?

时间:2010-08-15 21:42:50

标签: activerecord codeigniter mysql

嘿..我在我的sql-query中使用了几个“like”遇到了问题(用Codeigniter的activerecord生成):

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

事情是,它似乎读取这个查询,就好像第一个像第二个像第二个像是一个括号,但我希望在第二个和最后一个周围有一个括号(我希望它比较,如果上一个或下一个到最后的作品)。

如何使用Codeigniter的Active Record类实现这一目标?

当前代码:         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(); 

3 个答案:

答案 0 :(得分:4)

我不认为CI正在添加任何paranthesis。它会在前两个语句之间添加一个“AND”,在最后两个语句之间添加一个“OR”。为了实现你想要的,我会写自己的陈述。这非常简单。

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

注意我是如何使用绑定的。这会自动为您转义字符。

答案 1 :(得分:1)

这将解决问题

$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'

答案 2 :(得分:0)

当您必须使用表连接时,请尝试以下方法

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());
    }