1

使用 CodeIgniter ORM active_record,例如我可以生成 SQL ..?

示例生成器 SQL:... AND( LIKE ... OR LIKE ...)

SELECT id, c1, c2 FORM t1 WHERE id ='1' AND ( c1 LIKE '%3%' OR c2 LIKE '%3%' )

Enccontre 不是以组合 ORM 函数的形式来生成类似于我在 SQL 实例中显示的内容。

这是什么,但最灭亡的不是我想要的。

$this->db->select('id, c1, c2')
                ->from('t1')
                ->where('id', '1111')
                ->like('c1',$sSearch)
                ->or_like('c2',$sSearch)
                ->get();
4

2 回答 2

1

当混合AND和时OR,括号是你的朋友。CodeIgniter 的活动记录不支持混音ANDOR随心所欲。

CodeIgniter 将输出以下查询:

SELECT id, c1, c2 FORM t1 WHERE id ='1' AND c1 LIKE '%3%' OR c2 LIKE '%3%'

显然,这不是你想要的。您可以做的是:传递一个自定义字符串以WHERE将其用作子句。

// Since we are using a custom string, we need to escape manually
$sSearch = $this->db->escape_like_str($sSearch);
$this->db->select('id, c1, c2')
            ->from('t1')
            ->where('id', '1')
            // this will add the clause like you want
            ->where("(`c1` LIKE '%$sSearch%' OR `c2` LIKE '%$sSearch%')", NULL, FALSE)
            ->get();

这将输出您想要的查询:

SELECT id, c1, c2 FORM t1 WHERE id ='1' AND (c1 LIKE '%3%' OR c2 LIKE '%3%')
于 2012-07-17T16:59:10.810 回答
0

由于您的英语很难理解,因此我正在尝试这样做...

我假设您尝试%在关键字之前或之后使用带有通配符的 LIKE ..

您可以通过在 like 或 or_like 中使用 before、after、both(default) 来做到这一点。

<?php
$this->db
     ->select('id, c1, c2')
     ->from('t1')
     ->where('id', '1111')
      //$this->db->like('title', 'match', 'before'); 
      //Produces: WHERE title LIKE '%match'  
      //$this->db->like('title', 'match', 'after'); 
      //Produces: WHERE title LIKE 'match%' 
      //$this->db->like('title', 'match', 'both'); 
      //Produces: WHERE title LIKE '%match%'
     ->like('c1', $sSearch)
     ->or_like('c2', $sSearch)
     ->get();

或者您可以使用原始 sql 执行 - http://codeigniter.com/user_guide/database/queries.html

<?php $this->db->query("YOUR SEQUEL STATEMENT HERE");
于 2012-07-17T16:47:29.163 回答