2013-03-19 3 views
3

У меня есть 2 таблицынабора отношения бакалея ошибка падла

CREATE TABLE `tbl_patient` (
    id_patient  INTEGER  NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    name   VARCHAR(25) NOT NULL DEFAULT "not available", 
    att1   VARCHAR(5) NOT NULL DEFAULT "att1", 
    att2   VARCHAR(25) NOT NULL DEFAULT "att2", 
    att3   VARCHAR(25) NOT NULL DEFAULT "att3", 
    CONSTRAINT `uc_Info_patient` UNIQUE (`id_patient`)   
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 

и

CREATE TABLE `tbl_patient_medicine` ( 
    id_patient_medicine INTEGER  NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    id_patient   INTEGER  NOT NULL, 
    name_medicine  VARCHAR(50) NOT NULL DEFAULT "", 
    dosis    VARCHAR(50) NOT NULL DEFAULT "",   
    start_date   timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    treatment   VARCHAR(50) NOT NULL DEFAULT "", 
    times_per_day  VARCHAR(50) NOT NULL DEFAULT "",  
    CONSTRAINT fk_ID_Patient_Medicine FOREIGN KEY (id_patient) REFERENCES `tbl_patient`(id_patient) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 

Как вы можете видеть таблицу patient_medicine является промежуточной между таблицей tbla_medicines и стола пациента.

Теперь я хочу проконсультироваться со всеми данными из tbl_patient_medicine с продуктовым падла like in this sqlfiddle

supossing проходит идентификатор в Ури (в данном примере будет id_patient = 1) У меня есть

public function details_medication($my_id = 0) 
{ 
    try{ 
    $crud = new grocery_CRUD(); 
    $crud->where('id_patient',$my_id); 
    $crud->set_table('tbl_patient_medicine'); 


     //HOW TO DO IT? 
     $crud->set_relation('id_patient', 'tbl_patient', 'id_patient'); 


    $output = $crud->render(); 
     $this->_output($output); 

    }catch(Exception $e){ 
    show_error($e->getMessage().' --- '.$e->getTraceAsString()); 
    }  
} 

SO Я пробовал разные способы, но есть ошибки, как это:

A Database Error Occurred 

Error Number: 1052 

Column 'id_patient' in where clause is ambiguous 

SELECT `tbl_patient_medicine`.*, j7a675883.id_patient AS s7a675883 
FROM (`tbl_patient_medicine`) 
LEFT JOIN `tbl_patient` as j7a675883 
ON `j7a675883`.`id_patient` = `tbl_patient_medicine`.`id_patient` WHERE `id_patient` = '1' LIMIT 25 

Номер строки: 87

+0

Я не уверен, я думаю, его первичный ключ Thats вызывает problem.Try используя другое имя столбца, попробуйте это, $ crud-> set_relation ('id_patient', ' tbl_patient ',' name '); Просто попробуйте neme o/p – Christopher

ответ

3

Я сделал свой пример:

Контроллер:

function medicine() 

{ 
    $crud = new grocery_CRUD(); 

    $crud->set_table('tbl_patient_medicine'); 
    $crud->required_fields('id_patient','name_medicine','dosis','start_date','treatment','time_per_day'); 
    $crud->columns('id_patient','name_medicine','dosis','start_date','treatment','time_per_day'); 
    $crud->fields('id_patient','name_medicine','dosis','start_date','treatment','time_per_day'); 

    $crud->set_relation('id_patient','tbl_patient','name'); 

    $output = $crud->render(); 

    $this->_example_output($output); 
} 

Это работает!

Отредактировано:

$crud->set_relation('id_patient','tbl_patient','{name}, {att1}, {att2}, {att3}'); 
+0

вы могли бы написать полный код, так как я думаю, что я делаю что-то очень не так? – cMinor

+0

Здесь у вас есть полный контроллер. Протестируйте его, и он будет работать. –

+0

Хорошо, я пробовал, и он работает, но есть ли способ получить все поля 'tbl_patient' like, ID, NAME, att1, att2, att и все поля' tbl_patient_medicine'? В вашем решении я могу получить только в поле ID имя пациента, как получить все поля из 'tbl_patient' – cMinor

-1

Попробуйте изменить WHERE j7a675883. id_patient

+3

ну, я не могу, потому что это автогенерируется grocerycrud – cMinor

Смежные вопросы