【问题标题】:why can't i use parentheses in codeigniter join query为什么我不能在 codeigniter 连接查询中使用括号
【发布时间】:2013-02-03 15:19:01
【问题描述】:

嗨,我正在使用 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 不能这样做,请帮助...

这是错误

【问题讨论】:

    标签: php mysql codeigniter activerecord


    【解决方案1】:

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

    【讨论】:

    • 人们在投票前应该三思而后行:)
    【解决方案2】:

    要么

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

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

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

    【讨论】:

    • 如果您认为应该可以,请使用 $this->db->last_query() 输出完整的 sql 语句,并在此处发布以供我们查看
    【解决方案3】:

    复制自 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() 函数以适合您的 需要。

    【讨论】:

      【解决方案4】:

      试试这个

          $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 ");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-07
        • 2017-08-17
        • 1970-01-01
        • 1970-01-01
        • 2015-08-21
        • 1970-01-01
        • 2017-04-06
        相关资源
        最近更新 更多