【问题标题】:How to get result on Where Clause satisfied some condition?如何获得 Where Clause 满足某些条件的结果?
【发布时间】:2018-03-17 11:07:54
【问题描述】:

我正在使用 MySQL 数据库表 scholarship_discount。其中我有三个字段,即 ma​​xPercentage、min Percentage 和 name。因此,如果所有字段都满足我的条件,我想运行查询以获取行。我正在使用 Laravel 5.6 框架。问题是当我在 MySql Workbench 中运行这个查询然后得到正确的结果但是当通过 Laravel 尝试然后得到错误的结果。

问题示例 ::

如果我给 user value as 78 那么我得到 row id 5 ,否则 96 然后 row 是 1.ok 没问题。使用 mysql 工作台。

但是当我给出 98 ,96,97,99 时,我没有得到任何结果。为什么?我不知道。没有删除任何记录。我的意思是它应该返回 row id 1 但给了我 blank Array []。

我的查询是:

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应该大于user Value。 我的数据库记录是:

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 eloquent 上提供解决方案,然后请描述一下。
我可以过滤或搜索 maxPercentage { value } minPercentage 之间的行吗? 喜欢

75 myValue 70

【问题讨论】:

  • 在您的查询中,您有maxPercentage <= 90。它不会返回第 1 行,因为 maxPercentage 是 100。你应该这样做 maxPercentage >= 90。

标签: php mysql laravel-eloquent laravel-5.6


【解决方案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();

我用 is solution 检查了我的情况,每次我得到我的结果。

【讨论】:

    【解决方案2】:

    where maxPercentage &lt;= 90 - 这意味着最大百分比必须等于或大于 90% 如果您将此值更改为 95,那么是的,只会返回 id=1 的行 .

    minPercentage &gt;= 90 - 表示最低比例必须小于 90%

    如果这不是您所要求的,请进一步详细说明。您选择执行此操作的方法可能是最有效的方法,即使不是最简单的方法。

    【讨论】:

    • 好的,谢谢你.. 但是你能测试我的查询并纠正它是否有误。因为我已经告诉了我的情况,但是使用该查询我没有得到我想要的结果。
    • return $data = ScholarshipDiscount:: where('maxPer' ,'&gt;=', $request-&gt;value ) -&gt;orWhere('maxPer',$request-&gt;value) -&gt;orderBy('id','desc')-&gt;get();
    • 我的 laravel 代码,但我得到的结果不正确。
    • 如果你没有得到你想要的结果,你想从中得到什么结果,你实际上得到了什么结果?
    • 是的,我已经更新了我的问题。请从头开始阅读,然后您就可以理解了。
    【解决方案3】:

    试试这个代码

    return $data = ScholarshipDiscount::where(function($q) use ($request){
                   return $q->where('maxPercentage' ,'>=', $request->value)
                            ->orWhere('maxPercentage',$request->value);
                    })->orderBy('id','desc')->get();
    

    【讨论】:

      猜你喜欢
      • 2021-10-13
      • 1970-01-01
      • 2018-01-09
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多