我正在使用 MySQL 数据库表 scholarship_discount 。我有三个字段 maxPercentage,min Percentage和name 。因此,如果所有字段满足我的条件,我想运行查询以获取行。我正在使用Laravel 5.6 Framework。问题是当我将此查询运行到 MySql Workbench 然后获得正确的结果但是当尝试通过Laravel然后得到错误的结果。
问题示例::
如果我将用户值设为78 ,那么我会行ID 5 ,否则 96 然后行为1 .ok没问题。使用 mysql workbench 。
但是当我给出 98,96,97,99 时,我得不到任何结果。为什么?我不知道。没有删除任何记录。我的意思是它应该返回行ID 1 但是给我空白数组 []。
我的查询是:
SELECT * FROM confidence.scholarship_discounts where name='ssc' and
(maxPer >= 100 or maxPer = 100 ) and `scholarship_discounts`.`deleted_at` is null
order by id DESC;
我的搜索条件 MaxPercentage 应大于用户值。 我的数据库记录是:
id name maxPercentage minPercentage discountPercentage
1 HSC 100 95 10
2 HSC 95 90 7
3 HSC 90 85 6
4 HSC 85 80 5
5 HSC 80 75 10
6 HSC 75 70 7
7 HSC 60 50 6
因此,根据此表,如果我将95作为值,则查询应返回行ID 1。
因此,如果Laravel上提供的解决方案雄辩,那么请更好地描述它 我可以在maxPercentage {value} minPercentage之间过滤或搜索行。 喜欢
75 myValue 70
答案 0 :(得分:1)
我已经解决了自己的问题。实际上我对表字段做错了。我选择了错误的字段来比较我的输入值。
ScholarshipDiscount::where( 'name' ,'ssc' )
->where( function( $q ) use ( $request ) {
$q-> where('minPer' ,'<=', $request->ssc );
$q-> orWhere('minPer' , $request->ssc );
$q-> orWhere('maxPer' , $request->ssc );
} )->orderBy('id','asc')->first();
我检查了我的状况是解决方案,每次我得到我的结果。
答案 1 :(得分:0)
BindingResult bindingResult =
new BeanPropertyBindingResult(myBeanObject, "myBeanObjectName");
validator.validate(myBeanObject, bindingResult);
- 这意味着最大百分比必须等于或大于90%如果您将此值更改为95然后是,则只返回id = 1的行
where maxPercentage <= 90
- 意味着最低持续时间必须低于90%
如果这不是您要求的内容,请进一步详细说明。您选择这样做的方法可能是最有效的方法,如果不是最简单的方法。
答案 2 :(得分:0)
试试此代码
return $data = ScholarshipDiscount::where(function($q) use ($request){
return $q->where('maxPercentage' ,'>=', $request->value)
->orWhere('maxPercentage',$request->value);
})->orderBy('id','desc')->get();