Помощь с выбором, объединение нескольких таблиц с CodeIgniter - MYSQL - PullRequest
1 голос
/ 01 августа 2011

Я пытаюсь сделать запрос в Codeigniter, который позволит пользователю получить запись, которую он ранее отправил в мою базу данных.

Это моя схема:

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

enter image description here

У меня проблемы с определением того, что мне нужно сделать для некоторых из моих столов

Например, 1: М или М: М

  1. 1 процедура имеет 1 или несколько имя_процесса
  2. a protocol_event может или не может использовать ресурсы
  3. 1 процедура состоит из 1 или нескольких сотрудников

Я думаю, что мне нужно использовать Select, Joins для этого, и я завершил некоторые из них, но для отношений «многие ко многим» и связанных таблиц я не понимаю, как это сделать.

Это то, что я получил до сих пор с точки зрения кода, но он не возвращает никаких строк, поэтому я думаю, что это неправильно:

    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
        $criteria = array 
        (
            'procedure_id' => $record_id
        );

        //this selects the columns from procedure table for use in joins 
        $this->db->select('procedure.procedure_id, procedure.patient_id, procedure.department_id, procedure.name_id , procedure.dosage_id');
        //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', 'inner');

        //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', 'inner');

        //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', 'inner');

        //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', 'inner');

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

        /*
        Code for other tables:
        I need help with

        procedure_event, staff, resources, hr

        */

        //this part I think is wrong
        $result = $this->db->get();


        //
        if ($result->num_rows >0)
        {
            echo "There is Data!";

        }

        else
        {
            echo "No Data!";

        }

}

Я получаю сообщение о том, что "Нет записей" , однако в моих таблицах есть данные и т. Д .:

Так что мой запрос до сих пор должен быть неправильным.

Спасибо за ваше время!

1 Ответ

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

Во-первых, лично я считаю, что проще писать такие сложные запросы, как это, в чистом тексте, а не с использованием активных записей.

Все ваши соединения используют внутренние; то есть все строки должны найти партнера в другой таблице. Если какой-либо из них не существует, вы получите 0 строк. Рассмотрите возможность использования LEFT JOIN, как предлагалось ранее.

Все ли эти таблицы содержат данные на данный момент?

Нужна ли абсолютно строка-партнер в каждой из этих таблиц или вы рассчитываете на случаи, когда строки отсутствуют?

...