Вы можете перебрать каждую строку набора результатов из продуктов, а затем сделать еще один запрос по product_sku.Это накладные расходы и неэффективно.Но, MYSQL group_concat - ваш друг здесь.
Идея состоит в том, чтобы объединить нужные поля, а затем сгруппировать их в списке выбора для каждого из вариантов.Затем вы можете взорвать их позже, чтобы создать реальный результат.убедитесь, что выбранные разделители не могут присутствовать в базе данных.
Что-то вроде:
$this->db->simple_query('SET SESSION group_concat_max_len = 1000000');
$q = $this->db->select("A.id,A.cat_id,A.subcat_id,A.manu_id,A.pro_name,A.slug,A.meta_title,A.meta_desc,A.pro_desc,
A.feature_img,A.feature,A.view,A.created_at,A.updated_at,
GROUP_CONCAT(CONCAT(B.sku_no, 'æ',B.rprice,'æ',B.sprice,'æ',B.availability) SEPARATOR 'ø') as variants",FALSE)
->from('products A')
->join('product_sku B','A.id = B.product_id')
->where('A.id', $id)
->group_by('A.id,A.cat_id,A.subcat_id,A.manu_id,A.pro_name,A.slug,A.meta_title,A.meta_desc,A.pro_desc,
A.feature_img,A.feature,A.view,A.created_at,A.updated_at')
->get();
$results = [];
foreach ($q->result_array() as $row) {
$variants = array();
if($row['variants']){
foreach (explode('ø',$row['variants']) as $variant) {
list($sku,$rprice,$sprice,$availability) = explode('æ',$variant);
$variants[] = [
'sku' => $sku,
'rprice' => $rprice,
'sprice' -> $sprice,
'availability' => $availability
];
}
}
$row['variant'] = $variants;
unset($row['variants']);
$results[] = $row;
}
return $results;