zoukankan      html  css  js  c++  java
  • 学习笔记-关于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使用的格式是如此,更显合理性和专业性
  • 相关阅读:
    网络安全分析
    java实现 洛谷 P1464 Function
    java实现 洛谷 P1464 Function
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1540 机器
    java实现 洛谷 P1540 机器
  • 原文地址:https://www.cnblogs.com/YeYunRong/p/8585666.html
Copyright © 2011-2022 走看看