【问题标题】:Laravel Database Join sql or Array joinLaravel 数据库连接 sql 或数组连接
【发布时间】:2018-07-24 19:05:03
【问题描述】:

我有两张桌子:

  1. outgo_table
    • 1.1 daily_money_column
    • 1.2 created_at_column
  2. 收入表**
    • 2.1 daily_money_column
    • 2.2 created_at_column

我要选择什么?

  1. 我想使用 created_at_column 从两个表中选择 daily_money_column 的总和
  2. 我想加入他们的每日 created_column

例如: outgo_table


|daily_money_column| created_at_column    |
|    100           |  2018-07-15 13:21:00 |
|    150           |  2018-07-14 13:44:00 |
|    200           |  2018-07-14 13:11:00 |
|    170           |  2018-07-12 13:14:00 |
|    500           |  2018-07-11 13:48:00 | 

收入表

|daily_money_column| created_at_column    |
|    200           |  2018-07-15 13:42:00 |
|    300           |  2018-07-15 13:42:00 |
|    200           |  2018-07-13 13:42:00 |
|    200           |  2018-07-11 13:42:00 |
|    200           |  2018-07-11 13:42:00 |
|    50000         |  2018-07-10 13:42:00 | 

我想要这样的结果?

| daily_money_column_from_outgo | daily_money_column_from_income | created_at |
|    100                        |             500*               | 2018-07-15 |
|    350                        |              0                 | 2018-07-14 |
|    0                          |             200                | 2018-07-13 |
|    170                        |              0                 | 2018-07-12 |
|    500                        |             400                | 2018-07-11 |
|    0                          |            50000               | 2018-07-10 |

【问题讨论】:

    标签: php mysql laravel eloquent laravel-5.5


    【解决方案1】:

    你可以这样做:

    DB::table('outgo_table')->select(array(
        DB::raw('sum(outgo_table.daily_money_column)'),
        DB::raw('sum(income_table.daily_money_column)'),
        DB::raw('DATE_FORMAT(income_table.created_at, "%Y-%m-%d")')
    ))->join('income_table', function($query){
        $query->on(DB::raw('DATE_FORMAT(outgo_table.created_at, "%Y-%m-%d")'), '=', DB::raw('DATE_FORMAT(income_table.created_at, "%Y-%m-%d")'))
    })->groupBy(DB::raw('DATE_FORMAT(income_table.created_at, "%Y-%m-%d")'))
      ->get();
    

    【讨论】:

    • 我怎样才能完全加入?
    • 完全加入是什么意思?
    • 这个 sql 命令没有给我想要的结果。它只是在两个表中的日期相等时给我,但我想要所有结果。
    • 如果 outgo 表中有一条记录在income_table 中不存在,而您在结果集中需要它,则需要使用左连接。而对于相反的情况,您需要使用右连接。
    猜你喜欢
    • 2017-04-11
    • 2016-04-15
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多