【问题标题】:Comparing multiple database row values with Laravel Eloquent / MySQL使用 Laravel Eloquent / MySQL 比较多个数据库行值
【发布时间】:2017-11-18 03:50:19
【问题描述】:

我在我的项目中使用 Laravel,并且有一个 MySQL 表,如下所示:

| User_id | technology | years_experience |
| 1       | PHP        |  4               |
| 2       | AngularJS  |  2               |
| 1       | HTML       |  2               |

目前我正在使用仅支持一个条件的标准 where 查询

Table::where([
['technology', '=', 'PHP'],
['years_experience', '>', 2]
])->get()->pluck('user_id');

如果我想检索 PHP > 2 AND HTML > 1 的所有 User_id,如何按 User_id 过滤和分组结果?

【问题讨论】:

    标签: php mysql sql laravel eloquent


    【解决方案1】:

    尚未对此进行测试,但理想情况下我想这就是您所需要的

    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']);
    

    【讨论】:

      【解决方案2】:

      问题是(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');
      

      【讨论】:

      • 产生 0 个结果。还尝试使用数据库管理器中 toSql() 函数生成的 SQL
      【解决方案3】:

      使用 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')
      

      【讨论】:

        猜你喜欢
        • 2015-07-31
        • 1970-01-01
        • 2020-05-29
        • 2016-06-15
        • 1970-01-01
        • 1970-01-01
        • 2023-01-06
        • 1970-01-01
        • 2010-09-18
        相关资源
        最近更新 更多