显示一对多关系数据

时间:2014-02-22 16:11:42

标签: php mysql codeigniter one-to-many

我在使用CodeIgniter显示记录时遇到问题。我使用纯PHP代码完成了这项工作,但我很困惑如何使用CodeIgniter来完成它。

Doctor         Doctor Specialty     
Rashid         Cardiology, Gastroenterology , Neurology 

控制器代码:

public function appointmentSixStats(){

  $this->load->view('admin/dashboard/appointment-stats-doctor',$this->data);
}

我的表格结构:

  • tbl_doctor
  • tbl_specialty(包含所有专业)
  • tbl_doctor_specialty(包含所有医生指定的专业)
  • tbl_appointment(包含所有医生预约)

问题:

  • 如何将数据传递给视图?
  • 如何从1对多关系中循环数据?

我愿意将每个医生记录显示为以逗号分隔的价值以及他们的专业。

2 个答案:

答案 0 :(得分: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 :(得分: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();