2017-08-01 51 views
3

这里是我的member_profiles表中的列:查询生成器Laravel计算所有25岁到35岁是一个

ID
姓氏
FIRST_NAME
生日
civil_status

公务员状态值是“单身”,“已婚”和“离婚”。

此表已经有成千上万的条目。 我想统计所有25到27岁的单身成员。

我可以用这样的开始,但不知道如何继续与特定年龄范围匹配起来

$members = MemberProfile::where('civil_status', 'single')->count();

+0

声音很大,所以也许尝试一些 – rtfm

回答

1

试试这个,

$count = DB::table('member_profiles') 
     ->select(DB::raw('floor(DATEDIFF(CURDATE(),birthday) /365) as age') ,'civil_status') 
     ->where('civil_status','single') 
     ->where('age','>',25) 
     ->where('age','<',35) 
     ->count(); 

这里floor功能是在十进制值的情况下舍入。由于month_between在sql中无法识别,因此您可以使用DATEDIFF(),它以天数为单位,并将其除以365得到年龄值。

希望你明白。

+0

哦,好一个@sagar高塔姆。我会尝试一下。如果不是手动输入今天的日期,而是使用MySQL的'CURDATE()'函数来引用“今天的日期” –

+0

。 –

+0

@RodneyZanoria我已更新了片刻,以查看它。 –

0

您可以使用碳和whereBetween

use Carbon\Carbon; 
    Class { 
    ....... 
    ....... 
    $today = Carbon::now(); 
    //$today = Carbon::createFromDate(2017, 7, 2);//to make manually 
    $sub25 = $today->subYears(25); 
    $today = Carbon::now(); 
    //$today = Carbon::createFromDate(2017, 7, 2);//to make manually 
    $sub35 = $today->subYears(35); 


    $members = MemberProfile::where('civil_status', 'single') 
    ->whereBetween("birthday",[$sub25,$sub35]) 
    ->count(); 
+0

你认为这会起作用吗? '$ sub35'的值将在当天前25 + 35 = 60年,所以请改善您的答案。 –

+1

@sagar:我没有检查,但更新。 – C2486

+0

伟大你已经做到了 –