【问题标题】:CodeIgniter - Error Number: 1146 (Table doesn't exist after execute a "CREATE TABLE" command)CodeIgniter - 错误号:1146(执行“CREATE TABLE”命令后表不存在)
【发布时间】:2015-07-11 22:08:35
【问题描述】:

我昨天在这里发布了一个关于 CodeIgniter 的 mySQL 更新语法问题: CodeIgniter - MySQL Error 1064 (Update table1 inner join table2(...))

但是现在我解决了这个问题之后,又出现了另一个问题。现在更新查询不知道新创建的表。但是如果我改成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>";
        };


?>

显示/错误:

问对了!

发生数据库错误

错误号:1146

表“pacsdb.STUDY_LIST_AUX”不存在

更新STUDY_LIST_AUX,study_reportSET 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' 在哪里 STUDY_LIST_AUX.study_iuid = 'study_report.study_iuid'

刷新页面后我检查了phpmyadmin,该表确实存在,它包含来自select语句的数据。你能告诉我我做错了什么吗?

【问题讨论】:

  • update 函数的第一个参数应该是表名。 'STUDY_LIST_AUX, study_report 这是你的表名吗?应该是'STUDY_LIST_AUX'

标签: php mysql codeigniter


【解决方案1】:

这可能会给你带来真正的问题。删除 ,study_report 在你的表名之后。试试看

$this->db-
>update('STUDY_LIST_AUX', 
$data, 
 array('STUDY_LIST_AUX.study_iuid'=>
'study_report.study_iuid'));

【讨论】:

  • 现在有错误,但更新并没有“更新”任何内容。我确实想要一个带有“来自另一个表”的更新的子查询,其中 table1.id=table2.id
【解决方案2】:

仔细观察。

表'pacsdb.STUDY_LIST_AUX'

看到最后那个逗号了吗?那不应该在那里。错误信息是对的。

【讨论】:

  • 这应该是评论而不是答案。
  • 因为它应该作为错字关闭
  • @ShaifulIslam:为什么?这确定了查询的问题。所以我没有详细说明如何修复查询,但这是个人选择。这仍然是一个答案。
  • @LightnessRacesinOrbit 你比我经验丰富。我想你比我更清楚答案应该是什么。你刚刚评论说 OP 犯了一个错误。也许他不知道这是他的错误.因此,他解释为什么这是一个错误会更有帮助。
  • @ShaifulIslam:从那次经验中我知道,有时让 OP 自己进行最后的演绎飞跃会更有帮助。在这种情况下,表名不包含尾随逗号不是很明显吗? OP 需要知道这是显而易见的,以便他或她下次自己发现问题。
【解决方案3】:

解决方案比看起来更简单。

$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);

这似乎是 CodeIgnigter 框架在更新集成功能 ($this->db->update(...)) 上的问题。它不适用于子查询,最好的解决方案是使用正常的查询执行函数 ($this->db->update($query))

无论如何,感谢您的帮助;)您的所有回答都非常有助于解决此问题。

【讨论】:

    猜你喜欢
    • 2011-12-29
    • 2013-10-20
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2014-05-29
    相关资源
    最近更新 更多