【问题标题】:how to get data from three tables by a join statement in mysql如何通过mysql中的join语句从三个表中获取数据
【发布时间】:2010-10-02 06:31:28
【问题描述】:

在我的应用程序中,我有三个表,reservationpatientsub_unit,我需要从预订表中获取 patient_id并在患者表中查询患者数据同时我需要从预约表中获取 sub_unit_id 并从 sub_unit 中查询 sub_unit 名称表 ...我需要将所有这些数据按顺序放入一个数组中,例如 patient_id, sub_unit_name, patient_name, address 并将其传递给 Codeigniter 表格类以绘制表格。

如何同时查询三个表来查询出这些数据?你们能帮帮我吗?

【问题讨论】:

    标签: php codeigniter mysql


    【解决方案1】:

    使用代码点火器语法可以如下完成 -

    $this->db->select('r.patient_id, s.sub_unit_name, p.patient_name, p.address');
    $this->db->from('reservation r');
    $this->db->join('patient p', 'p.id = r.patient_id');
    $this->db->join('sub_unit s', 's.id = r.sub_unit_id');
    $query = $this->db->get();
    
    
    You can check your formed query by -
    echo $this->db->_compile_select();exit;
    

    【讨论】:

    • 非常感谢您的回答,这对我来说比我找到的解决方案更熟悉...!
    【解决方案2】:
    Select r.patient_id, s.sub_unit_name, p.patient_name, p.address 
    from reservation r, sub_unit s, patient p 
    where r.patient_id = p.patient_id and r.sub_unit_id = s.sub_unit_id 
    

    【讨论】:

      【解决方案3】:

      join 语法在 SQL 中非常简单。您可能正在寻找这样的东西:

      SELECT   reservation.patient_id, 
               sub_unit.sub_unit_name, 
               patient.patient_name, 
               patient.address
      FROM     reservation
      JOIN     patient ON (patient.id = reservation.patient_id)
      JOIN     sub_unit ON (sub_unit.id = reservation.sub_unit_id);
      

      在 MySQL 中,默认连接是 Inner Join,我认为这就是您要查找的内容。您可能还想查看Outer Joins,它们也非常有用。

      【讨论】:

        【解决方案4】:

        它成功了伙计们,我使用 Codeigniter 活动记录就这样做了,希望你们也可以使用它

            function get_data(){
            $sql = 'SELECT * FROM visit,patient,sub_unit WHERE visit.patient_patient_id = patient.patient_id AND visit.sub_unit_sub_unit_id = sub_unit.sub_unit_id';
        
            $this->db->order_by("reference_number", "desc");
            $query = $this->db->query($sql);
            return $query;
        }
        

        感谢大家的支持!

        【讨论】:

        • 您在该查询中使用的是非常古老的 ANSI-89 连接语法(也称为隐式连接),而不是更流行(和现代)的 ANSI-92 语法(也称为显式连接) .虽然大多数现代数据库将以相同的方式处理这两种变体,但通常建议远离旧语法。这不太容易理解,因为您在每个连接的 WHERE 子句中添加了一个额外的表达式,而且忘记连接表达式也容易得多。
        • 非常感谢丹尼尔的评论,我会研究一下!我只熟悉这种类型,所以才用它!
        猜你喜欢
        • 1970-01-01
        • 2022-08-11
        • 2017-10-29
        • 1970-01-01
        • 2020-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-03
        相关资源
        最近更新 更多