我试图在活动记录中隐藏此查询
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,所以我需要将其包括在内。任何帮助表示赞赏。
答案 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();
可能你有更改名字,因为他们在不同的数据库,但我相信你可以做到。