简体   繁体   English

在Codeigniter的查询构建器中重写数据库查询

[英]Rewriting database query in Codeigniter's query builder

I'm trying to rewrite existing database query in Codeigniter' query builder, how do I solve WHERE EXISTS(I think that's where's the problem)? 我正在尝试在Codeigniter的查询生成器中重写现有的数据库查询,我该如何解决WHERE EXISTS(我认为这是问题所在)?

This is original query I want to rewrite: 这是我要重写的原始查询:

$query = $this->db->query('SELECT p_customer.*' .
        ' FROM p_customer' .
        ' WHERE EXISTS (' .
        'SELECT null' .
        ' FROM p_customer_group_rel' .
        ' WHERE p_customer_group_rel.customer_group_id=' . $e_id.
        ' AND p_customer_group_rel.customer_id = p_customer.id' .
        ')' .
        ' AND p_customer.deleted IS NULL' .
        ' AND p_customer.id > 0' .
        ' ORDER BY p_customer.full_name'
    );

This is what I got so far: 这是我到目前为止所得到的:

$query = $this->db
        ->select('p_customer.*')
        ->from('p_customer')
        ->where('EXISTS(SELECT null FROM p_customer_group_rel WHERE 
p_customer_group_rel.customer_group_id= ' . $e_id . ' AND 
p_customer_group_rel.customer_id = p_customer.id)')
        ->where('p_customer.deleted is NULL')
        ->where('p_customer.id > 0')
        ->order_by('p_customer.full_name');
        ->get();

The result I get from first query is array of object. 我从第一个查询中得到的结果是对象数组。 This is what I get from my query: 这是我从查询中得到的:

SELECT p_customer.* FROM p_customer WHERE EXISTS( SELECT null FROM p_customer_group_rel WHERE p_customer_group_rel.customer_group_id= $e_id ) AND p_customer_group.port_id = p_port.id

which is not what I want, any help? 这不是我想要的,有什么帮助吗? :) :)

Maybe it's not best solution, but I did the following and it works: 也许这不是最好的解决方案,但是我做了以下工作,并且可行:

$sub_q = 'SELECT null FROM p_customer_group_rel WHERE p_customer_group_rel.customer_group_id=' . $e_id . ' AND p_customer_group_rel.customer_id = p_customer.id';
$query = $this->db ->select('p_customer.*') ->from('p_customer') ->where('EXISTS(' . $sub_q . ')') ->where('p_customer.id >', 0) ->where('p_customer.deleted', NULL) ->order_by('p_customer.full_name') ->get();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM