Codeigniter Active记录复杂查询

时间:2012-08-31 11:06:56

标签: mysql codeigniter activerecord

> * 1。我需要在活动记录*

中写这个

我需要加入这3个表,但加入的条件是非常非常有选择性的

$this->db->select(name);
$this->db->from('table0');
$this->db->join('table1','(table1.id=0 AND table0.feild1 = table1.feild1) OR (table1.id=1 AND table0.feild2 = table1.feild2)') // <--- how to write this is my question

我可以做一个简单的连接,但主要问题是在上面提到的连接中实现条件。这也是非常非常的一小部分!大查询所以我真的无法将其更改回原生的SQL查询,如:

$this->db->query('//entire sql query'); //cant do this, need to write ACTIVE RECORDS

当我写活动记录时,firebug会抛出一个错误说:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近')OR

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

说实话,我不知道有可能。 CI不使用真正的活动记录,因此每个方法都有非常严格的参数,我没有看到任何可以被欺骗来执行您需要的任务。

我会尝试重新编写您的查询:

$this->db->select(name);
$this->db->from('table0');
$this->db->join('table1','(table1.id=0 AND table0.feild1 = table1.feild1)', LEFT);
$this->db->join('table1','(table1.id=1 AND table0.feild2 = table1.feild2)', LEFT);
$this->db->where('(table1.id=0 AND table0.feild1 = table1.feild1)');
$this->db->or_where('(table1.id=1 AND table0.feild2 = table1.feild2)');

我相信这个查询会返回正确的值,但你肯定想彻底测试它。希望这至少能指出你正确的方向。