2013-02-19 57 views
1

你好我使用笨加入为什么我不能使用笨括号连接查询

$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查询,是这样做的codeignier不能,请帮助.. 。

这是错误

enter image description here

回答

0

无论是

1)将您的 “AND c.3rdPartyID!= 0” 到一个单独的 - >,其中()

2)写你的查询&使用:

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

,如果你认为它应该工作,请使用输出$完整的SQL语句这个 - > DB-> last_query(),并张贴在这里给我们看 – jmadsen 2013-02-19 03:22:00

0

复制来自ellislab论坛:

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

所以基本上,你不能使用join()函数。你可以用 使用query()函数并自己写出来,或者扩展 Active Record类并重写join()函数以满足你的需求。

4

使用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); 
+0

人们应该认为,一旦给予好评之前三思在downvote之前:) – jit 2016-09-28 06:36:05

相关问题