Как использовать коррелированный подзапрос в запросе Active record в Codeigniter

Я работаю над тем, чтобы получить информацию о клиентах из разных таблиц. Я создал и протестировал этот запрос, и он работает нормально. Проблема в том, как пользователю (преобразовать) этот запрос в запрос Active Records. Спасибо вам.

            SELECT c.cust_id, `c`.`cust_contact_name`, `c`.`cust_active_flag`, 
            (select COUNT(`pm`.`cust_id`)  from property_master as pm 
            Where pm.cust_id = c.cust_id) as prop_count,
            (select a.addr_phoneno1 from address as a
            WHERE a.cust_id = c.cust_id AND a.addr_type_flag IN ('C', 'CP')) as cust_phone,
            (select count(ci.cust_id) from customer_inquiry as ci
            WHERE ci.cust_id = c.cust_id) as inquiry_count,
            (select max(inq_date) from customer_inquiry as ci
            WHERE ci.cust_id = c.cust_id) as last_inq_date
            FROM customer as c
            GROUP BY c.cust_ID

1 ответ

Решение

CodeIgniter Активные классы записей не имеют прямой поддержки подзапросов. Вы можете использовать любую стороннюю библиотеку, такую ​​как https://github.com/NTICompass/CodeIgniter-Subqueries или $this->db->query(); выполнить ваш запрос.

Тем не менее, вы можете использовать следующий способ. Но я предложу использовать $this->db->query();

$this->db->select('c.cust_id, `c`.`cust_contact_name`, `c`.`cust_active_flag`, 
            (select COUNT(`pm`.`cust_id`)  from property_master as pm ' Where pm.cust_id = c.cust_id) as prop_count, (select a.addr_phoneno1 from address as a
            WHERE a.cust_id = c.cust_id AND a.addr_type_flag IN ('C', 'CP')) as cust_phone,
            (select count(ci.cust_id) from customer_inquiry as ci
            WHERE ci.cust_id = c.cust_id) as inquiry_count,
            (select max(inq_date) from customer_inquiry as ci
            WHERE ci.cust_id = c.cust_id) as last_inq_date)
         ->from('customer c');
$this->db->group_by('c.cust_ID');
$result = $this->db->get();
Другие вопросы по тегам