Necesito hacer una tabla dinámica usando la siguiente tabla. No importa si es de ChartJS o Google Chart. Necesito tomar "Tipos de sangre" para el eje Y como etiquetas y para el eje X necesito tomar la cantidad de filas para cada tipo de sangre donde "está disponible" es igual a 1.
Lo intenté de la manera anterior, obtiene los datos a la vista, pero necesita volver a escribir el código para cada tipo de sangre, por lo que no es muy eficiente. Necesito saber ¿hay alguna manera mejor?
Controlador
public function bloodTypesChart() { $query = $this->db->query("SELECT COUNT(PacketID) as count,(BloodType) as blood_type FROM packets WHERE (isAvailable) = '1'"); $packetCount = $this->db->count_all_results(); $record = $query->result(); $chartData = []; foreach($record as $row) { $chartData['label'][] = 'O+'; $chartData['data'][] = $packetCount; } $chartData['chart_data'] = json_encode($chartData); $this->load->view('insight',$chartData); }Puede que esta no sea la solución más eficiente, pero seguro que hará bien el trabajo.
public function bloodTypesChart() { $totalPackets = $this->db->count_all_results(); $chartData = []; $blood_types = $this->db->query("SELECT (BloodType) as blood_type FROM packets WHERE (isAvailable) = '1' GROUP BY blood_type") ->result_array(); foreach($blood_types as $bt) { $record = $this->db->query("SELECT COUNT(PacketID) as count FROM packets WHERE BloodType = '{$bt['blood_type']}'") ->result_array(); foreach($record as $row) { $chartData['label'][] = $bt['blood_type']; $chartData['data'][] = $row['count']; } } $chartData['chart_data'] = json_encode($chartData); $this->load->view('insight',$chartData); }RECOMENDADO: También puedes probar algo como esto
$record = $this->db->from('packets') ->select('count(PacketID) count, BloodType blood_type') ->group_by('blood_type') ->get() ->result_array(); foreach($record as $row) { $chartData['label'][] = $row['blood_type']; $chartData['data'][] = $row['count']; }Por supuesto, aún puede usar el método query() y escribir manualmente sus consultas.
No he probado ninguno de estos, pero debería darle una idea de a dónde ir a continuación.
Esta es una solución mejor y más simple. Se evitó el uso de bucles php para obtener datos.
public function bloodTypesChart() { $query=" SELECT BloodType as blood_type, COUNT(PacketID) as mycount FROM packets WHERE isAvailable = 1 GROUP BY blood_type "; $chartData = []; $blood_types = $this->db->query($query)->result_array(); foreach($blood_types as $row) { $chartData['label'][] = $row['blood_type']; $chartData['data'][] = $row['mycount']; } $chartData['chart_data'] = json_encode($chartData); $this->load->view('insight',$chartData); }