2014-02-22 95 views
0

我在使用CodeIgniter顯示記錄時遇到問題。我已經使用純PHP代碼完成了這個工作,但我很困惑,我該如何使用CodeIgniter來完成。顯示一對多關係數據

Doctor   Doctor Specialty  
Rashid   Cardiology, Gastroenterology , Neurology 

控制器代碼:

​​

我的表結構:

  • tbl_doctor
  • tbl_specialty(包含所有專業)
  • tbl_doctor_specialty(包含所有醫生指派專業)
  • tbl_appointment(包含所有醫生預約)

問題:

  • 我怎樣才能將數據傳遞給意見?
  • 如何循環數據,因爲它來自1對多關係?

我願意將每個醫生記錄顯示爲以逗號分隔的值以及他們的專業。

回答

2

你可以用它GROUP_CONCAT(expr)不推薦使用,因爲默認設置的字符長度的限制到1024個字符之間怎麼過,但它可以增加

$sql="SELECT d.* , 
GROUP_CONCAT(s.title) specialities, 
GROUP_CONCAT(a.title) appointments 
FROM tbl_doctor d 
JOIN tbl_doctor_specialty ds ON (d.id = ds.doctor_id) 
JOIN tbl_specialty s ON (s.id = ds.speciality.id) 
JOIN tbl_appointment a ON (a.doctor_id =d.id) 
GROUP BY d.id"; 
$result=$this->db->query($sql); 
return $result->result(); 
1

您可以從查詢本身獲取它。

試試看看這個代碼。

$this->db->select('d.name, GROUP_CONCAT(s.specialty SEPARATOR ",") as doc_specialty'); 
    $this->db->from('tbl_doctor d'); 
    $this->db->join('tbl_doctor_specialty ds', 'd.id = ds.doctor_id'); 
    $this->db->join('tbl_specialty s', 's.id = ds.specialty_id'); 
    $this->db->group_by("d.id"); 
    $query = $this->db->get(); 
+0

中使用聚合函數其建議使用'GROUP BY'否則會導致單行不會導致每個組[GROUP BY(Aggregate)Functions *](https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html) –

+1

@MKhalidJunaid對不起,我錯過了添加該行。謝謝 :-) –