Laravel数据库联接sql或数组联接

时间:2018-07-24 19:05:03

标签: php mysql laravel eloquent laravel-5.5

我有两个表:

  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 |

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式实现:

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();