zoukankan      html  css  js  c++  java
  • 表的数据很大筛选问题

    当条件很大时,我们就不要用IN了。因为那样我们的sql语句就会很大,解决方法用临时表和 左连接加索引

    public function run($daily = ''){
            $daily = is_numeric($daily) ? date('Y-m-d', $daily) : $daily;
            
            if(empty($daily)){
                $daily = date('Y-m-d', time() - (60*60*24));
            }
            
            // 创建临时表
            $this->salesDailySales->execute("DROP TABLE IF EXISTS 000_sales_p");
            $sql = "CREATE TABLE 000_sales_p 
                    SELECT orders_id,orders_platform,orders_import_date
                    FROM  orders
                    WHERE  orders_import_date='".$daily."' 
                    AND  orders_status NOT IN ('900','100')";
            $returnInfo = $this->salesDailySales->execute($sql);
            
            if($returnInfo !== false){
                // 给临时表添加索引
                $this->salesDailySales->execute("ALTER TABLE 000_sales_p ADD INDEX (orders_id)");
                
                // 生成临时表 000_tmp_op
                $this->salesDailySales->execute("DROP TABLE IF EXISTS 000_tmp_op");
                $returnInfo = $this->salesDailySales->execute("CREATE TABLE 
                                    000_tmp_op 
                                SELECT 
                                    p.orders_platform,p.orders_import_date, 
                                    op.orders_product_quantity, op.product_id, 
                                    op.orders_item_total_price_usd,
                                    IF(op.product_attr_code=99,1,op.product_attr_code) as product_attr_code
                                FROM 
                                    000_sales_p p
                                LEFT JOIN 
                                    orders_product op 
                                ON 
                                    p.orders_id = op.orders_id"
                );
                
                
                if($returnInfo !== false){
                    
                    // 添加 索引 product_id,product_attr_code
                    $this->salesDailySales->execute("ALTER TABLE  000_tmp_op ADD INDEX (product_id)");
                    $this->salesDailySales->execute("ALTER TABLE  000_tmp_op ADD INDEX (product_attr_code)");
                    $sql = "
                        INSERT INTO
                            sales_daily_sales(product_attr_id,product_id,orders_platform,sales_daily_sales_date,daily_sales_qty,daily_sales_gmv)
                        SELECT
                            pa.product_attr_id, pa.product_id, 
                            op.orders_platform, op.orders_import_date, SUM( op.orders_product_quantity ),
                            SUM(op.orders_item_total_price_usd)
                        FROM
                            000_tmp_op op
                        LEFT JOIN
                            product_attr pa
                        ON
                            pa.product_id = op.product_id
                        AND
                            pa.product_attr_code = op.product_attr_code
                        GROUP BY
                            op.orders_import_date, op.orders_platform, product_attr_id";
                    
                    // 添加数据之前 要删除同一天的数据
                    $map = array();
                    $map['sales_daily_sales_date'] = $daily;
                    $this->salesDailySales->where($map)->delete();
                    
                    // 导入数据
                    $returnInfo = $this->salesDailySales->execute($sql);
                    
                    // 删除临时表
                    $this->salesDailySales->execute("DROP TABLE IF EXISTS 000_tmp_op");
                    $this->salesDailySales->execute("DROP TABLE IF EXISTS 000_sales_p");
                    
                    if($returnInfo !== false){
                        return true;
                    }
                }
                
                
            }
  • 相关阅读:
    python--模块与包
    内置函数 的总结
    迭代器 生成器 列表推导式 生成器表达式的一些总结
    函数的有用信息 带参数的装饰器 多个装饰器装饰一个函数
    函数名的应用(第一对象) 闭包 装饰器
    动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结
    函数的初识 函数的返回值 参数
    文件操作 常用操作方法 文件的修改
    遍历字典的集中方法 集合的作用 以及增删查的方法
    计算机硬件的小知识
  • 原文地址:https://www.cnblogs.com/shaoshao/p/4220438.html
Copyright © 2011-2022 走看看