本系列,将介绍一些不同场景下 MySQL 语句的写法,大部分是结合 Laravel 框架的,但是,明白其中的查询原理,才是最关键的。

        需求:日首充会员,就是根据给定的时间来统计当天历史上第一次充值的会员。

    表结构
id user_id finish_at order 
 1 1 2019-07-22 ***
 2 2 2019-07-22 ***
 3 3 2019-07-21 ***
 4 1 2019-07-20 ***

比如,数据如上图,查询2019-07-22这天的日首充会员。则需要查出来的数据为:id = 2 这条数据。其他均不符合。 

    原生 SQL
// Order.php
$date = date('Y-m-d');
$firstRecharge = self::query()->selectRaw('user_id, date(finish_at) as at_time')->groupBy('user_id')->havingRaw("count(user_id) = 1 and at_time = '{$date}'")->get()->toArray();

        其中,使用到了 groupBy 和 having。先把 user_id 进行分组,然后刷选, count(user_id) 是历史上包含今天所有第一次充值的会员,at_time = $date,进行第二次刷选,把今天( $date )的会员刷选出。这就是我们所需要的数据了。如果大家,还有其他的写法,欢迎在评论区里讨论。

        由于能力有限,不足或有不解之处,希望在下方评论区与我讨论,共同提高 。

        无论何时何地,云聚云散皆是美!只是美的形态不一样而已~