public function foobar($work_order_id, $research_name) { //TODO: CHECK OUT IF 'SELECT DISTINCT IS A HACK!! $sql = 'SELECT DISTINCT '. 'sample.*, sample_type.name as type ' . 'FROM work_order '. 'JOIN sample ON work_order.id = sample.work_order_id '. 'JOIN sample_type ON sample.sample_type_id = sample_type.id ' . 'JOIN layer ON sample.id = layer.sample_id '. 'JOIN ' . $research_name . '_research ON sample.id = ' . $research_name . '_research.sample_id '. 'WHERE work_order.id = ?'; $samples = $this->db->fetchAll($sql, array($work_order_id)); $sql2 = 'SELECT '. 'sample.id as sample_id , sample.work_order_id as work_order_id, '. 'material.name as material, ' . 'layer.* '. 'FROM work_order '. 'JOIN sample ON work_order.id = sample.work_order_id '. 'JOIN layer ON sample.id = layer.sample_id '. 'JOIN material ON layer.material_id = material.id ' . 'JOIN ' . $research_name . '_research ON sample.id = ' . $research_name . '_research.sample_id '. 'WHERE work_order.id = ?'; $layers = $this->db->fetchAll($sql2, array($work_order_id)); $sql3 = 'SELECT '. 'sample.id as sample_id , sample.work_order_id as work_order_id, '. $research_name .'_research.* '. 'FROM work_order '. 'JOIN sample ON work_order.id = sample.work_order_id '. 'JOIN ' . $research_name . '_research ON sample.id = ' . $research_name . '_research.sample_id '. 'WHERE work_order.id = ?'; $researches = $this->db->fetchAll($sql3, array($work_order_id)); $sql4 = 'SELECT '. 'sample.id as sample_id , sample.work_order_id as work_order_id, '. 'layer.id as layer_id, '. $research_name .'_research_data.* '. 'FROM work_order '. 'JOIN sample ON work_order.id = sample.work_order_id '. 'JOIN layer ON sample.id = layer.sample_id '. 'JOIN ' . $research_name . '_research_data ON ' . 'layer.id = ' . $research_name . '_research_data.layer_id '. 'WHERE work_order.id = ?'; $researches_data = $this->db->fetchAll($sql4, array($work_order_id)); foreach ($samples as &$sample) { foreach ($researches as $research) { if($sample['id'] == $research['sample_id']) { $sample[$research_name . '_researches'][] = $research; } } foreach ($layers as &$layer) { foreach ($researches_data as $research_data) { //if research belongs to layer if ($layer['id'] == $research_data['layer_id']) { //populate the layer $layer[$research_name . '_researches_data'][] = $research_data; } } //if layer belongs to sample if ($sample['id'] == $layer['sample_id']) { //populate the sample $sample['layers'][] = $layer; } } } return $samples; }