You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Error Number 1096:数据库表GRAND TOTAL显示异常求助

解决Error 1096并实现GRAND TOTAL显示问题

首先,咱们来定位你遇到的Error Number 1096: No tables used的核心原因:在你的代码最后调用了$this->db->get(),这个方法是CodeIgniter用来快速从指定数据表取数的工具(默认需要先通过from()指定表,或者直接传表名),但你之前已经通过$this->db->query()执行了完整的自定义SQL语句,再调用get()会让CI尝试执行一个无指定表的空查询,这就触发了1096错误。

修正后的Model代码

public function total() {
    $totl = array();
    
    // 合并所有逻辑为单条SQL,减少数据库交互,避免会话变量问题
    $sql = '
        SELECT 
            namatoko, 
            tgl_inpt, 
            omz, 
            SUM(IF(YEARWEEK(tgl_inpt) = YEARWEEK(SUBDATE(CURDATE(), INTERVAL 1 YEAR)), omz, 0)) as yestr, 
            SUM(IF(YEARWEEK(tgl_inpt) = YEARWEEK(NOW()), omz, 0)) as now, 
            (SUM(IF(YEARWEEK(tgl_inpt) = YEARWEEK(NOW()), omz, 0))-SUM(IF(YEARWEEK(tgl_inpt) = YEARWEEK(SUBDATE(CURDATE(), INTERVAL 1 YEAR)), omz, 0))) as selisih 
        FROM mzharian 
        INNER JOIN toko ON mzharian.toko=toko.idtoko 
        WHERE YEARWEEK(tgl_inpt) = YEARWEEK(CURDATE(),1) 
        GROUP BY idtoko 
        UNION 
        SELECT 
            "TOTAL", 
            null, 
            null, 
            ROUND(SUM(IF(YEARWEEK(tgl_inpt) = YEARWEEK(SUBDATE(CURDATE(), INTERVAL 1 YEAR)), omz, 0))), 
            ROUND(SUM(IF(YEARWEEK(tgl_inpt) = YEARWEEK(NOW()), omz, 0))), 
            ROUND(SUM(IF(YEARWEEK(tgl_inpt) = YEARWEEK(NOW()), omz, 0))-SUM(IF(YEARWEEK(tgl_inpt) = YEARWEEK(SUBDATE(CURDATE(), INTERVAL 1 YEAR)), omz, 0))) 
        FROM mzharian 
        ORDER BY CASE WHEN namatoko = "TOTAL" THEN 1 ELSE 0 END, tgl_inpt ASC
    ';
    
    $query = $this->db->query($sql);
    
    if ($query->num_rows() > 0) {
        $totl = $query->result();
    }
    return $totl;
}

关键修正与优化说明:

  1. 移除多余的$this->db->get():直接用$this->db->query($sql)执行完整自定义SQL,结果直接赋值给$query,彻底避免无表查询的错误。
  2. 合并SQL逻辑:把之前用会话变量存储的合计值,直接整合到UNION的第二个查询中,减少了3次额外的数据库请求,也避免了连接复用导致的变量值异常问题。
  3. 优化排序逻辑:原ORDER BY tgl_inpt ASC会让TOTAL行(tgl_inpt为null)排在最前面,改成CASE WHEN namatoko = "TOTAL" THEN 1 ELSE 0 END可以让总计行固定显示在结果最后。
  4. 性能优化建议:给YEARWEEK(tgl_inpt)表达式创建索引,能大幅提升WHERE和多个IF判断的查询效率;如果omz字段可能为null,建议用COALESCE(omz, 0)包裹,让计算更严谨。

内容的提问来源于stack exchange,提问作者eleonora anggi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:49:49