我有这个问题:
$providercounter = DB::table('users')
->select(DB::raw('count(provider) as count'),'users.provider')
->groupBy('provider')
->orderBy('count','desc')
->get();
foreach($providercounter as $provider){
$name[] = $provider->provider;
$count[] = $provider->count;
}
$providerUsers = Charts::create('bar', 'highcharts')
->title('Providers users')
->labels($name)
->values($count)
->responsive(true);
这会在图表中检索我的用户provider
列并计算它们。
如果我的用户是通过其社交网络帐户(例如facebook, google etc.
)注册的,则会获得数据,但如果我的用户是通过我的网站上的电子邮件地址注册的(因为他们的provider
列是null
)它不会检索和计算。
如何将我们提供的列为空的用户数据包含在内?
答案 0 :(得分:1)
使用IFNULL
$providercounter = DB::table('users')
->select(DB::raw('count(provider) as count'),'users.provider')
->groupBy(DB::Raw('IFNULL( users.provider , 0 )'))
->orderBy('count','desc')
->get();
或将提供者字段设置为默认值0 并将零视为没有提供者的用户
答案 1 :(得分:0)
您必须将主查询更改为:
如果您想 provider = null
,请使用此
$providercounter = DB::table('users')
->select(DB::raw('count(provider) as count'),'users.provider')
->whereNull('provider')
->groupBy('provider')
->orderBy('count','desc')
->get();
或者如果您想 provider != null
,请使用此
$providercounter = DB::table('users')
->select(DB::raw('count(provider) as count'),'users.provider')
->whereNotNull('provider')
->groupBy('provider')
->orderBy('count','desc')
->get();