我想从我的表中获取结果,按列排序,值大部分时间都在顶部重复。我正在使用拉拉维尔
数据存储为
- 电子邮件城市
- abc@anc.com 德里
- abc@njd.com 古尔冈
- bhy@jfl.com 诺伊达
- jsd@juk.com 德里
- hfk@jfj.com 古尔冈
- jfs@jfk.com 德里
预期成果
- 电子邮件城市
- abc@anc.com 德里
- jsd@juk.com 德里
- jfs@jfk.com 德里
- abc@njd.com 古尔冈
- hfk@jfj.com 古尔冈
- bhy@jfl.com 诺伊达
我使用的代码是
$list = SubscriberList::select('subscriber_lists.*',DB::raw('COUNT(subscriber_lists.location) as locationCount'))
->where('status', config('constants.IS_NOT_ACTIVE'))
->orderBy('locationCount','DESC')
->paginate(config('constants.PAGE_LIMIT'));
这肯定会解决您的问题:
$result = DB::table('subscriber_lists')
->select('email', 'city', DB::raw('count(*) as user_count'))
->orderBy('city')
->groupBy('email')
->get();
return $result->sortByDesc('user_count')->values();
您也可以使用 Model 类进行如下编码:
$result = SubscriberList::select('email', 'city', DB::raw('count(*) as user_count'))
->orderBy('city')
->groupBy('email')
->get();
return $result->sortByDesc('user_count')->values();
使用这个:
$list = SubscriberList::where('status', config('constants.IS_NOT_ACTIVE'))
->orderByRaw('(SELECT COUNT(*) FROM subscriber_lists sub WHERE city=subscriber_lists.city) DESC')
->paginate(config('constants.PAGE_LIMIT'));