我的查询是重复结果? MySQL / PHP / Codeigniter

时间:2011-08-02 10:29:02

标签: php mysql codeigniter join

为了使这个变得简单易懂,我将尽我所能给你所有细节,以便我能解决这个问题。


好的,我的问题是我的查询从我的数据库中取出 ONE 记录,返回的内容似乎是多个数组中相同记录的重复值。当我检查我的查询结果时,我的所有表都被复制并放入数组中 - 每个重复的记录(或行)都有一个数组。

我想的原因是我的1 - >许多关系表(Procedure - > Procedure_event)

这是我的shema(你会看到procedure和procedure_event)是1:M的关系。

http://i.imgur.com/Dju0G.png


Here是我的查询结果,因为您可以看到我的表(除了过程事件)在每个数组中使用相同的数据重复。返回的数组数量取决于与过程相关联的 procedure_event 行数。

在此列表中有三个! - > http://pastebin.com/pc53Pmgf

为了向您说明这里发生的事情是一个图表:

查询结果:

  

程序行x ---> procedure_event row x

     

程序行x ---> procedure_event row x + 1

     

程序行x ---> procedure_event row x + 1

我想要返回的是这个(没有其他表的重复):

  

程序行x ---> procedure_event x

           ---> procedure_event x+1

            ---> procedure_event x+1

以下是我在Codeigniter Active Record中的查询

public function view_record($record_id)
        {
            //The criteria used for WHERE is a variable with array of procedure_id = record_id that is passed to function
            //e.g. Record id = 2419
            $criteria = array 
            (
                'procedure_id' => $record_id
            );

            //this selects the columns from procedure table for use in joins 
            $this->db->select('*');
            //this is the table I want to use the columns from
            $this->db->from ('procedure');

            //this joins the patient row that matches its ID to the patient ID in the procedure table
            $this->db->join('patient', 'patient.patient_id = procedure.patient_id', 'left');

            //this joins the department row that matches its ID to the patient ID in the procedure table
            $this->db->join('department', 'department.department_id = procedure.department_id', 'left');

            //this joins the procedure_name row that matches its ID to the patient ID in the procedure table
            $this->db->join('procedure_name', 'procedure_name.procedure_name_id = procedure.name_id', 'left');

            //this joins the dosage row that matches its ID to the patient ID in the procedure table]
            $this->db->join('dosage', 'dosage.dosage_id = procedure.dosage_id', 'left');

            //----->This is what is causing the problem -- try a different JOIN?
            $this->db->join('procedure_event', 'procedure.procedure_id = procedure_event.procedure_id' , 'left');

            //this selects the row in procedure table that matches the record number
            $this->db->where('procedure.procedure_id', $record_id);

            //gets all the data from the query
            $result = $this->db->get();


            //
            if ($result->num_rows >0)
            {
                return $result->result();
            }

            else
            {
                return FALSE;

            }


        }

我希望每个人都清楚这一点。我希望有办法解决这个问题,否则我会陷入困境,因为我不知道如何处理所有这些重复的数据,因为它弄乱了我的foreach循环。

用莱娅公主的话说。

  

“帮助我Obi'wan,你唯一的希望!”

谢谢!

2 个答案:

答案 0 :(得分:1)

因此,如果我理解正确,您希望将procedure_event作为嵌套数组返回吗?这是对的吗?

如果是这样,我不确定Codeigniter是否提供了直接这样做的方法。您最好的选择可能是使用php处理您当前获得的数组,以将数据放入您想要的嵌套非重复格式。

您还可以将其细分为2个查询。一个用于获取所有过程数据,使用所有连接但省略了procedure_event关节。然后执行第二个查询,您只需将过程连接到procedure_event。然后,循环结果并按照您希望的方式准备数据将是一件简单的事情。

答案 1 :(得分:0)

你需要在php中处理查询结果数组,如下所示。

$result = $this->db->get();
foreach($result as $key=>$value){
  $result_arr[$value->procedure_id] = $value;
}

然后

return $result_arr;