Я вчера опубликовал вопрос с синтаксисом обновления mySQL на CodeIgniter: CodeIgniter – Ошибка MySQL 1064 (таблица Update1 внутри таблицы join2 (…))
Но теперь, когда я решил эту проблему, появился еще один. Теперь запрос на обновление не знает новую созданную таблицу. Но если я перейду на инструкцию select, она работает плавно.
По этой причине я решил опубликовать полный сценарий.
Код:
<?php $this->load->database(); $query_tbaux='CREATE TABLE IF NOT EXISTS STUDY_LIST_AUX AS ( SELECT DISTINCT p.pat_id, p.pat_custom1 age, p.pat_name, p.pat_sex, s.study_iuid, p.pat_birthdate, s.accession_no, s.study_datetime date_s, s.study_desc, s.mods_in_study, s.pk, c.institution, s.study_block, s.study_urgent, \'0000-00-00 00:00:00\' AS \'report_date\', \'{null}\' AS \'report_status\', s.study_tipo, s.study_src, s.study_consulta FROM study s INNER JOIN patient p ON s.patient_fk = p.pk INNER JOIN series c ON c.study_fk = s.pk INNER JOIN rel_users_hosp u ON u.hosp_id = c.institution WHERE s.study_datetime >= \'2015-04-26 00:00:00\' AND s.study_datetime <= \'2015-04-30 23:59:59\' AND s.study_iuid IS NOT NULL AND u.user_id = \'admin\' )'; if ($this->db->query($query_tbaux)) { echo "Q True!<br><br>"; $data = array( 'STUDY_LIST_AUX.report_date' => "DATE_FORMAT(study_report.report_date,'%Y-%m-%d %h:%i:%s')", 'STUDY_LIST_AUX.report_status' => 'study_report.report_status', ); $this->db->update('STUDY_LIST_AUX, study_report', $data, array('STUDY_LIST_AUX.study_iuid'=>'study_report.study_iuid')); } else { echo "Q False<br><br>"; }; ?>
Показать / Error:
Q Правда!
Ошибка базы данных Произошла
Номер ошибки: 1146
Таблица 'pacsdb.STUDY_LIST_AUX,' не существует
UPDATE
STUDY_LIST_AUX,
study_report
SETSTUDY_LIST_AUX
.report_date
= 'DATE_FORMAT (study_report.report_date, \'% Y-% m-% d% h:% i:% s \ ')',STUDY_LIST_AUX
.report_status
= 'study_report.report_status' WHERESTUDY_LIST_AUX
.study_iuid
= 'study_report.study_iuid'
Я проверил phpmyadmin после обновления страницы, и таблица действительно существует, и она содержит данные из оператора select. Можете ли вы рассказать мне, какую ошибку я сделал?
Это может вызвать у вас настоящую проблему. Исправьте, study_report после имени вашей таблицы. Попробуйте
$this->db- >update('STUDY_LIST_AUX', $data, array('STUDY_LIST_AUX.study_iuid'=> 'study_report.study_iuid'));
Обратите внимание.
Таблица 'pacsdb.STUDY_LIST_AUX,'
См. Эту запятую в конце? Этого не должно быть. Сообщение об ошибке является правильным.
Решение было более простым, чем кажется.
$query_update = "UPDATE STUDY_LIST_AUX INNER JOIN study_report SET STUDY_LIST_AUX.report_date = DATE_FORMAT(study_report.report_date,'%Y-%m-%d %h:%i:%s'), STUDY_LIST_AUX.report_status = study_report.report_status WHERE STUDY_LIST_AUX.study_iuid = study_report.study_iuid"; $this->db->query($query_update);
Кажется, что проблема связана с Framework CodeIgnigter для интегрированной функции обновления ($ this-> db-> update (…)). Он не работает с подзапросами, и лучшее решение для использования обычной функции выполнения запроса ($ this-> db-> update ($ query))
Во всяком случае, спасибо за помощь;) Все ваши ответы были очень полезны, чтобы добраться до этого решения.