我在phpmyadmin中有3個表。 disease_table,medicine_table,disease_medicine_table。如何在SQL中將多行數據庫存儲到變量中
病例:該病可以有多種藥物,這就是爲什麼我製作了第三張名爲disease_medicine表格的表格,該表格連接了疾病表格和藥物表格。
我的問題是如何獲得疾病的所有記錄。
我用笨框架
我期望的結果是:
- ID - disease_name - 藥品
- 1 - 牙痛 - MED1,MED2,med3,med4
- 2 - 頭痛 - med4,med8,med2,med5
或者您是否有更好的主意來解決我的問題?
這是我的疾病表
- ID(INT11)
- disease_name(varchar255)
這是我的藥表
- ID(INT11)
- med_name (varchar255)
- dosage_strength(varchar255)
- 價格(decimal65,2)
這是我disease_medicine表
- ID(INT11)
- disease_id(INT11)
- medicine_id(INT11)
- 用量(varchar255)
- 數量(int64)
Im去顯示在數據表服務器側的數據,這是我的代碼 Ajax控制器
public function get_diseases_for_table() {
$data = [];
if(($ajax_data = $this->input->get()) && $this->input->is_ajax_request()) {
extract($ajax_data);
$data = [
'draw' => $draw,
'recordsTotal' => $this->diseases->get_diseases_records_total(),
'recordsFiltered' => $this->diseases->get_diseases_records_filtered($ajax_data)
];
$data['data'] = $this->diseases->get_diseases($ajax_data);
}
$this->view = FALSE;
echo json_encode($data);
}
模型
public function get_diseases_records_total() {
$sql = 'SELECT d.id, d.disease_name, m.med_name, d.created_at ';
$sql .= 'FROM diseases d ';
$sql .= 'INNER JOIN diseases_medicines dm ON d.id = dm.disease_id ';
$sql .= 'INNER JOIN medicines m ON dm.medicine_id = m.id ';
$query = $this->db->query($sql);
return $query->num_rows();
}
public function get_diseases_records_filtered($data) {
extract($data);
$params = [];
$sql = 'SELECT d.id, d.disease_name, m.med_name, d.created_at ';
$sql .= 'FROM diseases d ';
$sql .= 'INNER JOIN diseases_medicines dm ON d.id = dm.disease_id ';
$sql .= 'INNER JOIN medicines m ON dm.medicine_id = m.id ';
$sql .= 'WHERE 1 ';
if(!empty($search['value'])){
$sql .= 'AND (d.id = ? ';
$sql .= 'OR d.disease_name LIKE ? ';
$sql .= 'OR m.med_name LIKE ? ';
$sql .= 'OR d.created_at LIKE ?) ';
}
if(!empty($search['value'])){
$params[] = $search['value'];
$params[] = $search['value'];
$params[] = $search['value'];
$params[] = $search['value'];
}
$query = $this->db->query($sql, $params);
return $query->num_rows();
}
public function get_diseases($data, $details = false) {
extract($data);
$params = [];
$sql = 'SELECT d.id, d.disease_name, m.med_name, d.created_at ';
$sql .= 'FROM diseases d ';
$sql .= 'INNER JOIN diseases_medicines dm ON d.id = dm.disease_id ';
$sql .= 'INNER JOIN medicines m ON dm.medicine_id = m.id ';
$sql .= 'WHERE 1 ';
if(!empty($search['value'])){
$sql .= 'AND (d.id = ? ';
$sql .= 'OR d.disease_name LIKE ? ';
$sql .= 'OR m.med_name LIKE ? ';
$sql .= 'OR d.created_at LIKE ?) ';
}
if(isset($order)){
$sql .= 'ORDER BY ' . $columns[$order[0]['column']]['data'] . ' ' . strtoupper($order[0]['dir']) . ' ';//$order[0]['column']
}
$sql .= 'LIMIT ?, ?';
if(!empty($search['value'])){
$params[] = $search['value'];
$params[] = '%' . $search['value'] . '%';
$params[] = '%' . $search['value'] . '%';
$params[] = '%' . $search['value'] . '%';
}
$params[] = (int)$start;
$params[] = (int)$length;
$query = $this->db->query($sql, $params);
return ($query->num_rows()) ? $query->result() : FALSE;
}
預先感謝
哪個DBMS實際使用的是mysql <> sql-server。 –
你存儲哪種藥物需要一個「小數(65,2)」的價格? – HoneyBadger
@HoneyBadger笑lol – BeetleJuice