La difficoltà di creare questo SQL con il generatore di query CI risiede nella parte selezionata all'interno del join sinistro. Puoi costruirlo usando join() funzione che sostituisce il parametro $table con il SELECT
parte:
questo è il codice CI finale:
$q=$this->db1 ->select ('*')
->join('(
select `product_id`
,count(*)
from `sma_sale_items`
group by `product_id`
) s','p.id = s.product_id','left')
->order_by('count(*)', 'DESC')
->get('sma_products p');
return $q->result();