为什么我不能在codeigniter连接查询中使用括号

时间:2013-02-19 02:58:25

标签: php mysql codeigniter activerecord

您好我正在使用codeigniter join

$this->db->join

我用过

$this->db->join ( $table2 . " as c","( c.3rdPartyID=a.ShopID OR c.3rdPartyID=a.ParentID OR c.ShopID=a.ShopID OR c.ShopID=a.ParentID )  AND c.3rdPartyID !=0 ", 'left' );

我也试过

$join_query = "( c.3rdPartyID=a.ShopID OR c.3rdPartyID=a.ParentID OR c.ShopID=a.ShopID OR c.ShopID=a.ParentID )  AND c.3rdPartyID !=0 ";

$this->db->join ( $table2 . " as c",$join_query, 'left' );

它给出了一个错误。

但是没有括号,它可以正常工作,就像这样

$this->db->join ( $table2 . " as c"," c.3rdPartyID=a.ShopID OR c.3rdPartyID=a.ParentID OR c.ShopID=a.ShopID OR c.ShopID=a.ParentID   AND c.3rdPartyID !=0 ", 'left' );

但在我的情况下,我需要括号,如果我去正常的mysql查询,代码无能为力这样做,请帮助......

这是错误

enter image description here

4 个答案:

答案 0 :(得分:6)

使用false。例如:

$this->db->join ( $table2 . " as c","( c.3rdPartyID=a.ShopID OR c.3rdPartyID=a.ParentID OR c.ShopID=a.ShopID OR c.ShopID=a.ParentID )  AND c.3rdPartyID !=0 ", 'left', false );

答案 1 :(得分:0)

无论

1)将您的“AND c.3rdPartyID!= 0”移到单独的 - > where()

2)写下您的查询&使用方法:

$sql = "Select...";
$this->db->query($sql);

答案 2 :(得分:0)

从ellislab论坛复制:

  

使用Active Record join()无法进行该查询   功能。有一行正则表达式可以查找   连接条件的某些结构(table.something =   table.somethingelse通常)。它将忽略其他任何字符   比重新创建第一部分时的字母数字和句点(。)   您提供的连接语句。部分原因是积极的   Record使用一个名为_protect_identifiers的私有函数   将任何必要的信息添加到列名称   (hostname.database.table.column)在需要的情况下(参见   文件'DB_driver.php'在Database系统文件夹中更好   描述)。在table.column之前添加其他字符   会导致这些字符位于列名称的中间   结构,如果需要添加主机或数据库名称   它

     

所以基本上,你不能使用join()函数。您可以   使用query()函数并自己完全写出来,或者扩展   Active Record类并重写join()函数以适合您的   需要。

答案 3 :(得分:0)

尝试这个

    $this->db->from ( $table2 . " as c"," join on ( c.3rdPartyID=a.ShopID OR c.3rdPartyID=a.ParentID OR c.ShopID=a.ShopID OR c.ShopID=a.ParentID )  AND c.3rdPartyID !=0 ");