首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Codeigniter使用joins表删除数据

Codeigniter使用joins表删除数据
EN

Stack Overflow用户
提问于 2012-05-14 18:07:20
回答 4查看 8.4K关注 0票数 8

从逻辑上讲,在SQL中,我们可以使用连接从表中删除数据,例如

代码语言:javascript
复制
DELETE  clb_subscriber_group_mapping .* FROM clb_subscriber_group_mapping 
INNER JOIN clb_driver_group ON (clb_driver_group.id = clb_subscriber_group_mapping.driver_group_id)
INNER JOIN clb_company ON (clb_company.id = clb_driver_group.company_id)
WHERE clb_company.id = 256 AND clb_subscriber_group_mapping.subscriber_id = 1784;

上述查询的CodeIgniter等效项是什么?

CodeIgniter是否支持使用joins删除查询?

EN

回答 4

Stack Overflow用户

发布于 2012-05-14 18:14:43

你必须使用Active Records吗?

下面的query将做不同的事情。

代码语言:javascript
复制
$int_company_id = 256;
$int_subscriber_id = 1784;

$this->db->query("
DELETE  clb_subscriber_group_mapping .* FROM clb_subscriber_group_mapping 
INNER JOIN clb_driver_group ON (clb_driver_group.id = clb_subscriber_group_mapping.driver_group_id)
INNER JOIN clb_company ON (clb_company.id = clb_driver_group.company_id)
WHERE clb_company.id = ? AND clb_subscriber_group_mapping.subscriber_id = ?;

", array($int_company_id, $int_subscriber_id));
票数 4
EN

Stack Overflow用户

发布于 2012-05-14 18:48:24

使用CodeIgniter的活动记录类不能做到这一点。它不支持delete查询中的连接。您必须使用Robin Castlin提到的$this->db->query()执行查询。

下面的代码取自核心文件。它是生成DELETE查询的内部组件之一。

代码语言:javascript
复制
function _delete($table, $where = array(), $like = array(), $limit = FALSE)
{
    $conditions = '';

    if (count($where) > 0 OR count($like) > 0)
    {
        $conditions = "\nWHERE ";
        $conditions .= implode("\n", $this->ar_where);

        if (count($where) > 0 && count($like) > 0)
        {
            $conditions .= " AND ";
        }
        $conditions .= implode("\n", $like);
    }

    $limit = ( ! $limit) ? '' : ' LIMIT '.$limit;

    return "DELETE FROM ".$table.$conditions.$limit;
}

正如您所看到的,其中没有指定插入JOIN子句的内容。

票数 4
EN

Stack Overflow用户

发布于 2017-01-25 22:38:10

我也遇到了同样的问题,连接被忽略了:

代码语言:javascript
复制
$r1 = $db->where("object2_type", $object_type)
->join($object_type, "$object_type.id = object1_id", "LEFT")
->where("$object_type.id IS NULL", null, false)
->delete("knots");

所以我是这样做的:

代码语言:javascript
复制
$ids = $db->select("knots.id")
->where("object2_type", $object_type)
->join($object_type, "$object_type.id = object1_id", "LEFT")
->where("$object_type.id IS NULL", null, false)
->get("knots")->result_object();
/* my ow function which generates a string like '1','2','3' or 0 */    
$ids_csv = $this->mh()->get_flat_items_as_csv($ids);
$r = $db->where("knots.id IN ($ids_csv)", null, false)->delete("knots);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10581239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档