• 学习笔记-关于laravel批处理及MySQL多表链接查询解析


    关于laravel批处理及MySQL多表链接查询解析

    一、Larave的批处理

    Laravel的批处理使用的是 <B>Eloquent</B>;
    用它检索指定表中的指定数据:
    
    表中的数据信息通过在Model中定义指定参数名
    <br>
    <br>
    //数据库链接方式;
    protected $connection = 'addr';
    <br>
    <br>
    //表名<br>
    protected $table = 'students';
    <br>
    <br>
    //约束主键<br>
    protected $primaryKey = 'id';
    <br>
    <br>
    //可被批量赋值的属性;<br>
    protected $fillable = ['name', ...];
    
    
    原代码如下:
    
    namespace App;
    
    use IlluminateDatabaseEloquentModel;
    
    class User extends Model
    {	
        protected $connection = 'addr';//数据库链接方式;
        protected $table = 'students';//表名
        protected $primaryKey = 'id';//约束主键	
        protected $fillable = ['name'];//可被批量赋值的属性;	
    }
    
    在控制器中引用
        use AppUser;
    
    代码实现:
        查询所有,我那张表中有一万数据将全部输出
    
        public function testSelect()
        {
            set_time_limit(0);
            $Info = User::all();
            dd($Info);
        }
    
    
    Collection {#10186 ▼
    items: array:10000 [▼
        0 => User {#10187 …26}
        1 => User {#10188 …26}
        2 => User {#10189 …26}
        3 => User {#10190 …26}
        4 => User {#10191 …26}
        5 => User {#10192 …26}
        6 => User {#10193 …26}
        7 => User {#10194 …26}
        8 => User {#10195 …26}
        9 => User {#10196 …26}
        10 => User {#10197 …26}
    ...
    

    注意: 在批处理中,批量插入是可以的,但条件是值一致,若值不一致则用循环单个插入,那会相当消耗性能; 解决方案就是使用原生的MySQL语句拼接;

    更多关于laravel的批处理链接 原文

    二、MySQL多表链接查询解析

    
    SELECT
     oi.user_id AS 用户ID,
     ub.bonus_type_id AS 红包类型ID,
     c.type_name AS 红包类型名称,
     count(ub.bonus_type_id) AS 使用次数
    FROM
    sdx_order_info oi
    LEFT JOIN sdx_user_bonus AS ub ON ub.bonus_id = oi.bonus_id
    LEFT JOIN sdx_bonus_type AS c ON c.type_id=ub.bonus_type_id
    WHERE 1=1
    AND ub.bonus_id>0
    AND oi.pay_time >= (UNIX_TIMESTAMP('2018-03-09') - 28800)
    AND oi.pay_time < (UNIX_TIMESTAMP('2018-03-16') - 28800)
    AND oi.pay_status IN (2,3,4) -- 付款状态(2-已付款 3-部分退款)
    AND oi.order_status IN (1,2,5,6) -- 订单状态(1-已确认 5-已分单)
    GROUP BY oi.user_id,ub.bonus_type_id,c.type_name
    ORDER BY oi.user_id ASC
    
    
    
    1、需要查询的信息字段除了在 select 中写入之外,还要在最下面的Group By 中写入,若不写入,则在原生SQL语句中会报错。
    2、两表之间的关联性 ON 条件一定要具备 <b>单一性,共有性</b>
        还可以多个条件相关联,如:
            ON ub.bons_id = oi.bons_id And ub.user_id = oi.user_ID
    3、三表关联方法如上代码所示,不应该将LeftJoin放在最后,那是错误的写法。
    4、在完成一个表的查询操作时应该对其进行合理的排序。
    5、若导出表,则尽量为.xslx格式,因为office使用的格式是如此,更显合理性和专业性
  • 相关阅读:
    根据字符串拆分字符串
    .NET WinForm读取扫描枪从COM口传过来的数据,显示在TextBox中,并做其他操作。
    《将博客搬至CSDN》
    mysql学习(二)DML
    mysql学习(一)DDL
    BigDecimal
    排序
    2017
    oracle的mapper小结
    数据结构查找
  • 原文地址:https://www.cnblogs.com/YeYunRong/p/8585666.html
Copyright © 2020-2023  润新知