如何解决Laravel / Eloquent,以二维方式检索数据其中,求和
我在Laravel中是个菜鸟,我想以一种“自动化”的方式从数据库中检索数据。我有一个查询,它获取键“ cases”的值,其中“ state”是最近重复的
$pieWyoming=State::select('cases')->where('state','=','Wyoming')->orderByDesc('id')->limit(1)->get()->sum('cases');
但是我想用whereIn
$statesArr = array("Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","District of Columbia","Florida","Georgia","Guam","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Northern Mariana Islands","Ohio","Oklahoma","Oregon","Pennsylvania","Puerto Rico","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virgin Islands","Virginia","Washington","West Virginia","Wisconsin","Wyoming");
$Wyoming=State::select('cases')->whereIn('state',$statesArr)->orderByDesc('id')->limit(1)->get()->sum('cases');
但是似乎遍历$ statesArr并仅获取最后一个值,这是正确的,但仅是一个状态的一个值,我希望所有状态的所有值
编辑,示例数据和预期输出
数据库保存数据https://res.cloudinary.com/dcdajhifi/image/upload/v1599003808/ex1_ys5ksi.png
并且我想只获取数组$ statesArr中每个状态的字段“ cases”的值,例如,每个状态应该是最后一个重复的状态 https://res.cloudinary.com/dcdajhifi/image/upload/v1599003808/ex2_lby8md.png
这是ALABAMA的最后一次出现,所以我想获取此行的案例值,即每个州的情况。因此,我可以创建一个面板,在其中显示州名称及其值的大小写和死亡,而无需查询每个州。
解决方法
尝试这样:
$statesArr = array("Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","District of Columbia","Florida","Georgia","Guam","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Northern Mariana Islands","Ohio","Oklahoma","Oregon","Pennsylvania","Puerto Rico","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virgin Islands","Virginia","Washington","West Virginia","Wisconsin","Wyoming");
$Wyoming = State::whereIn('state',$statesArr)->orderByDesc('id')->sum('cases');
,
要为每个州选择最新条目(基于最新的自动增量 ID),您可以像这样对表进行自连接
DB::table('states as a')
->select('a.*')
->leftJoin('states as b',function ($join) {
$join->on('a.state','=','b.state')
->whereRaw(DB::raw('a.id < b.id'))
;
})
->whereNull('b.id')
->whereIn('a.state',$statesArr)
->get();
如果您使用的是最新版本的laravel,则可以使用内部联接在上面重写
$latestStates = DB::table('states')
->select(DB::raw('max(id) as max_id'))
->groupBy('state');
$states = DB::table('states as a')
->joinSub($latestStates,'b',function ($join) {
$join->on('a.id','b.max_id');
})->whereIn('a.state',$statesArr)
->get();
或者您可以使用whereExists
$states = DB::table('states as a')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('states as b')
->whereRaw('a.state= b.state')
->groupBy('b.state')
->havingRaw('max(b.id) = a.id')
;
})->whereIn('a.state',$statesArr)
->get();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。