如何使用查询生成器在laravel中计算重新访问的客户(超过1次)?

时间:2019-12-31 05:38:12

标签: mysql laravel laravel-5 laravel-query-builder

我需要在一个月内计算重新访问的客户。这意味着需要计算一个月内表中有多个条目的customer_id。

我的查询仅显示总客户。

$count_customer_current_month = DB::table("customer_entry")->whereRaw('MONTH(date) = ?', 
                                [$currentMonth])->count();

4 个答案:

答案 0 :(得分:1)

只需使用group by customer_id having COUNT(customer_id) > 1

$entry_customers = DB::table("customer_entry")
   ->whereRaw('MONTH(date) = ?', [$currentMonth])
   ->groupBy('customer_id')
   ->havingRaw("COUNT(customer_id) > 1")
   ->selectRaw('COUNT(customer_id) AS entry_count, customer_id');

如果您想获得多少客户:

$entry_customers->get()->count() // count the collections.

或使用子查询获取客户数:

DB::table(DB::raw("({$entry_customers->getSql()}) AS entry_customer"))
   ->mergeBindings($entry_customers)
   ->count();

答案 1 :(得分:0)

另一种检查月份的方法:

DB::table("customer_entry")->whereMonth('date', '=',$currentMonth)->select(DB::raw('COUNT(customer_id)'))->groupBy('customer_id')->havingRaw("COUNT(customer_id) > 1")->get()

答案 2 :(得分:0)

您可以通过其他方法解决此问题。 您可以创建单独的表或将列(已访问)添加到登录表中。 每当用户登录时,访问量就会增加一。

架构

$table->bigIncrements('id');
$table->unsignedBigInteger('user_id')->unique();
$table->integer('visited')->default('0');

每当用户登录时,此访问字段就会增加一个

答案 3 :(得分:0)

也许以这种方式

Model::selectId($userId)->whereMonth('visit', '=', $month)->count();
  • 您获得了模型
  • 通过其ID选择模型的user
  • 按月份过滤
  • 计数

通过此操作,您将获得一个整数,该整数代表特定用户记录访问的总次数