雄辩-如何在其他多种情况下使用别名?

iqjalb3h  于 2021-06-17  发布在  Mysql
关注(0)|答案(0)|浏览(225)

继续讨论mysql线程中的问题:如何在mysql?中执行两个日期之间的自定义月差,我尝试仅在条件下将allowed\u exp\u range表与派生的“exp\u in\u months”结果以及其他一些条件连接起来。下面是细节。

table_name = "user"
id | name | join_date 
---------------------
1| Sam | 25-11-2017
2| Moe | 03-04-2017
3| Tim | 04-07-2018
4| Sal | 30-01-2017
5| Joe | 13-08-2018

//$user_query is the eloquent query after chaining different other conditions 
$user_query = $user_query->select(DB::raw("id, name , (YEAR(CURDATE())*12+MONTH(CURDATE())) - (YEAR(STR_TO_DATE(join_date, '%d-%m-%Y'))*12+MONTH(STR_TO_DATE(join_date, '%d-%m-%Y'))) - 1 -- whole months
           + CASE WHEN DAY(LAST_DAY(STR_TO_DATE(join_date, '%d-%m-%Y'))) - DAY(STR_TO_DATE(join_date, '%d-%m-%Y')) + 1 + DAY(CURDATE()) > 15 THEN 1 ELSE 0 END -- broken month
           AS exp_in_months)

table_name: "allowed_exp_range"
starting_exp_months | end_exp_months | category_id
--------------------------------------------------
0 | 6 | 1
9 | 24 | 1
11 | 50 | 2
100 | 150 | 2

if ($exp_based_condition_allowed == 1) {  // a variable from input
    $exp_ranges = AllowedExpRange::where('category_id', '=', $category_id)->get();

    $user_query = $user_query->where(function($q) use($exp_ranges) {
         foreach($exp_ranges as $range) {
             $q->orWhereBetween("exp_in_months", [$range->starting_exp_months , $range->end_exp_months]);
         }
    }
}

//there are still other conditions to be chained to $user_query after checking the experience range
$user_query = $user_query->get();

上面的代码在执行时失败,“column not found:1054 unknown column'exp\u in\u months'(位于'where子句'中),因为alias不能在同一级别的sql上的where中使用。如何使用eloquent在以下链接where/wherebetween查询中使用select的别名?
我可以通过在exp\u range之前获取集合输出并过滤具有不同条件的集合输出来实现最接近的输出,但是我无法在exp\u range condition之后将后续条件链接到$user\u query。
很少有帖子建议在执行原始sql时使用“having”子句,但是多个嵌套的having子句(比如orhaving和'between'子句)似乎是不可能的。欢迎任何建议/线索将exp\u范围条件链接到$user\u query。
提前谢谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题