2

嗨,我正在使用 codeigniter 加入

$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 无法做到这一点,请帮助...

这是错误

在此处输入图像描述

4

4 回答 4

10

使用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 );
于 2016-08-11T14:20:23.130 回答
0

复制自 ellislab 论坛:

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

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

于 2013-02-19T07:20:09.773 回答
0

任何一个

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

或者

2)编写您的查询和使用:

$sql = "Select...";
$this->db->query($sql);
于 2013-02-19T03:20:23.047 回答
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 ");
于 2020-07-28T08:27:08.523 回答