【问题标题】:Using Distinct and group by laravel Mysql通过 laravel Mysql 使用 Distinct 和 group
【发布时间】:2018-11-22 22:42:09
【问题描述】:

我有表 requests 和字段

`id` `user_id` `status` `url` `price` `date`

和表 peoplewith 字段

`id` `name` `number` `password` `nickname`

我正在尝试按每个日期对所有请求进行分组,并使用此查询计算每天有多少请求:

$data['dates'] = RequestModel::orderBy('date', 'desc')
        ->groupBy(DB::raw("DATE_FORMAT(date, '%Y-%m-%d')"))
        ->take(2)
        ->get(array(
            DB::raw('Date(date) as date'),
            DB::raw('COUNT(*) as requests'),
        ));

这给出了这样的数据:

"dates": [
{
    "date": "2018-06-13",
    "requests": 230
},
{
    "date": "2018-06-12",
    "requests": 399
}]

问题是当用户在people 表中创建新请求时,正在创建具有相同number 和不同nickname 的新用户。像这样:

`id` `name` `number` `password` `nickname`
 1   jack    555845   pass       555845-1
 2   jack    555845   pass       555845-2

我想计算具有不同用户编号的请求,但不知道该怎么做。 可以的话帮帮我

【问题讨论】:

  • 我想查看一些示例原始表数据以及预期的输出。
  • 尝试在分组前选择 ->select([DB::raw('Date(date) as date')])->groupBy("date")
  • 这不是我想要的
  • ->select([DB::raw('Date(date) as date')])->groupBy("date") 这给了我今天的日期
  • 为什么会这样?你没有设置people.id主键吗?

标签: php mysql laravel laravel-5


【解决方案1】:

我找到了解决办法

$data['requests'] = RequestModel::join(env('DB_DATABASE_2').'.people', env('DB_DATABASE_2').'.people.id', '=', env('DB_DATABASE_2').'.requests.user_id')
    ->where('requests.date', '>', \Carbon\Carbon::now('Asia/Tbilisi')->subDays(30))
    ->orderBy('requests.id', 'DESC')
    ->distinct()
    ->groupBy('people.number')
    ->get();

    $grouped = $data['requests']->groupBy(function($req){
        return explode(' ', $req->date)[0];
    });

    $data['dates'] = [];
    $i=0;
    foreach($grouped as $key => $date){
        $data['dates'][$i]['date'] = $key;
        $data['dates'][$i]['requests'] = sizeof($date);
        $i++;
    }

使用 laravel 集合

【讨论】:

猜你喜欢
  • 2013-08-28
  • 2017-11-18
  • 1970-01-01
  • 2014-01-12
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多