CodeIgniter Where_In从不同的表中选择?

时间:2014-12-02 08:46:45

标签: php mysql codeigniter

我试图在活动记录中隐藏此查询

SELECT 
crm_clients.id,
crm_clients.`moved_date`,
crm_clients.`contractor_id` 
FROM
dev_pfands.`crm_clients` 
WHERE crm_clients.`contractor_id` = 11 
AND (
crm_clients.`status` = 9 
OR crm_clients.`status` = 8 
OR crm_clients.`status` = 7
) 
AND crm_clients.id IN 
(SELECT 
 crm_client_cheques.`client_id` 
FROM
dev_pfands.`crm_client_cheques`) 
AND crm_clients.`moved_date` BETWEEN '2014-08-01' 
AND '2014-11-29 ' 
AND crm_clients.`contractor_id`<>''
GROUP BY crm_clients.`id

我遇到问题的部分是

AND crm_clients.id IN 
    (SELECT 
     crm_client_cheques.client_id 
    FROM
    dev_pfands.crm_client_cheques) `

我已经尝试过where_in方法,但是加班我尝试将$this ->db_pfands -> where('crm_client_cheques.client id' ,'id');的尝试包含在错误中并且不知道如何通过它。

原始查询应返回703行,当我删除了部分时,我坚持使用它增加到3045,所以我需要将其包括在内。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

首先,您的代码中存在错误。

$this->db_pfands->where('crm_client_cheques.client id', 'id');

这将是

$this->db_pfands->where('crm_client_cheques.client_id', 'id');

您必须提供正确的列名称,据我所知,数据库的列名称不包含任何空格。

现在我认为这个有效的记录查询将帮助您获得结果。

$query = $this->db->select('crm_clients.id, crm_clients.moved_date, crm_clients.contractor_id')
                  ->where('moved_date BETWEEN "2014-08-01" AND "2014-11-29"')
                  ->where('contractor_id', 'id')
                  ->where_in('status', [9,8,7])
                  ->from('crm_clients')
                  ->join('crm_client_cheques', 'crm_client_cheques.client_id = crm_clients.id')
                  ->group_by('id')
                  ->get();
$result = $query->result();

可能你有更改名字,因为他们在不同的数据库,但我相信你可以做到。