Мой запрос дублирует результаты? MySQL / PHP / Codeigniter - PullRequest
2 голосов
/ 02 августа 2011

Чтобы сделать это как можно более простым для понимания, я собираюсь дать вам все подробности, которые я могу, чтобы я мог разобраться в этой проблеме.


Хорошо, моя проблема в том, что мой запрос, который выбираетЗапись me ONE из моей базы данных возвращает, как представляется, повторяющиеся значения одной и той же записи в нескольких массивах.Когда я проверяю результат моего запроса, все мои таблицы дублируются и помещаются в массивы - по одному массиву для каждой дублирующейся записи (или строки).

Я думаю, что причиной этого является моя таблица отношений 1 -> Много (процедура-> Процедура_эвент)

Вот моя шма (вы увидите процедуру и процедуру_эвент): отношения 1: М.

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


Здесь - это результат моего запроса, как вы можете видеть, что мои таблицы (кроме события процедуры) повторяются с одинаковыми данными в каждом массиве.Количество возвращаемых массивов зависит от того, сколько protocol_event строк там связано с процедурой .

В этом списке их три!-> http://pastebin.com/pc53Pmgf

Чтобы проиллюстрировать вам, что здесь происходит, есть диаграмма:

Результат запроса:

строка процедуры x ---> method_eventстрока x

строка процедуры x ---> строка_струйного события x + 1

строка процедуры x ---> строка процедур_вент x + 1

Что я хочувозвращается (без дублирования других таблиц):

строка процедуры x ---> имя_процесса 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.

По словам принцессы Леи

«Помоги мне, Оби'ван, твоя единственная надежда!»

Спасибо!

Ответы [ 2 ]

1 голос
/ 03 августа 2011

Итак, если я правильно вас понимаю, вы хотите, чтобы значение method_event возвращалось как вложенный массив? Это правильно?

Если это так, я не уверен, если Codeigniter предлагает способ сделать это напрямую. Лучше всего, вероятно, обработать массивы, которые вы в настоящее время используете с помощью php, чтобы поместить данные во вложенный неповторяющийся формат.

Вы также можете разбить его на 2 запроса. Один, чтобы получить все данные процедуры, используя все соединения, но не используя соединение method_event. Затем выполните второй запрос, в котором вы просто присоединяете процедуру к method_event. Тогда было бы просто циклически просмотреть результат и подготовить данные так, как вам хотелось бы.

0 голосов
/ 22 февраля 2017

вам нужно обработать массив результатов запроса в php следующим образом.

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

, а затем

return $result_arr;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...