我使用Laravel作为我的项目并拥有如下的MySQL表:
| User_id | technology | years_experience |
| 1 | PHP | 4 |
| 2 | AngularJS | 2 |
| 1 | HTML | 2 |
目前我正在使用标准,其中查询只支持一个标准
Table::where([
['technology', '=', 'PHP'],
['years_experience', '>', 2]
])->get()->pluck('user_id');
如果我想使用PHP>检索所有User_id,我如何按User_id过滤和分组结果? 2 AND HTML> 1?
答案 0 :(得分:0)
没有测试过这个,但理想情况下我猜这就是你需要的
Table::where('technology', '=', 'PHP')->andWhere('years_experience', '>', 2)->get()->pluck('user_id')->andWhere('user_id','=',ANYUSERID)->groupBy('user_id')->get(['user_id','technology','years_experience']);
答案 1 :(得分:0)
问题是 (condition1 AND condition2)AND(condition3 AND condition4)
这是你可以做到的:
Table::where(function($query){
$query->where('technology', '=', 'PHP')->where('years_experience', '>', 2);
})->where(function($query) {
$query->where('technology', '=', 'HTML')->where('years_experience', '=', 1);
})->get()->pluck('user_id');
答案 2 :(得分:0)
使用WHERE / AND的问题在于它不会比较行级别的值,而是跨列搜索匹配值
" hack"是使用HAVING()。这是工作解决方案:
Table::groupBy('user_id')
->havingRaw("sum(tech='PHP' AND experience>=2) > 0")
->havingRaw("sum(tech='HTML' AND experience>=1) > 0")
->get()
->pluck('user_id')