единственное, что вы должны рассмотреть здесь, - это использовать get_compiled_select
функцию query builder
- как только вы это поймете - это довольно легко. Вам просто нужно разделить ваши запросы и объединить их в один запрос
следующее должно делать работу
ваш отбор
$strSubQuery = $this->db
->select('
( 6371 * acos( cos( radians(24.8964089) ) * cos( radians(RB.`lat`) )
* cos( radians(RB.`lng`) - radians(67.06749)) + sin(radians(24.8964089))
* sin( radians(RB.`lat`)))) AS distance, RB.`id` as BRID , R.`name` as NAME
')
->from('rent_br RB')
->join('rent r', 'r.id = RB.restId')
->join('rent_category RC', 'R.id = RC.restId')
->where('TRUNCATE(RB.`lat`, 0) >= TRUNCATE(24.8964089,0)', NULL, false)
->where('TRUNCATE(RB.`lat`, 0) < TRUNCATE(25.8964089,0)', NULL, false)
->where('RB.isdelivery`', 1)
->where('RC.catId', 11)
->having('distance <=', 50)
->order_by('distance', 'ASC')
->get_compiled_select();
Ваш дополнительный запрос
$strSubQueryJoin = $this->db
->select_max('radius', 'maxRadius')
->select('rent_br_delivery_radius.rest_brId AS bbrId')
->from('rent_br_delivery_radius')
->group_by('bbrId')
->get_compiled_select();
и, наконец, мы соединили эти кусочки
$query = $this->db
->select('A.*, B.*')
->from($strSubQuery.' A', false)
->join('('.$strSubQueryJoin.') B', 'A.BRID = B.bbrId', 'INNER', false)
->where('A.distance <= B.maxRadius', NULL, false)
->order_by('A.NAME')
->get();
Это должно в значительной степени сделать работу.