您好我正在使用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查询,代码无能为力这样做,请帮助......
这是错误
答案 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 ");