Laravel 根据 2 个相关列查询获取行
Laravel Query get row based on 2 dependent column
帮我查询一下。
我有一个 Laravel 应用程序,其中有一个 table 有 3 列(季度、年份、值)。
quartal
year
value
1
2019
3
2
2019
5
3
2019
5
4
2019
10
1
2020
7
2
2020
5
例如,我想获取从 quartal 3 years 2019 到 quartal 2 years 2020 的值
如何查询这个案例?
对于我可以使用的年份,但对于四分之一,这取决于年份。
这是我当前的查询。但效果不是很好
DB::table($table)
->whereBetween('year',[$startYear, $endYear])
->whereBetween('quartal',[$startQuartal, $endQuartal])
->get();
如何将四分之一添加到年份?
DB::table($table)
->whereBetween(
DB::raw('year + (quartal - 1) / 4'),
[
$startYear + ($startQuartal - 1) / 4,
$endYear + ($endQuartal - 1) / 4
]
)
->get();
您需要做的是从 quartal
和 year
创建一个复合列,然后查询它。
DB::table($table)
->whereRaw("concat(year,quartal) >= ?", "$startYear$startQuartal")
->whereRaw("concat(year,quartal) <= ?", "$endYear$endQuartal")
->get();
您可以参考此 SQL 查询 https://www.db-fiddle.com/f/4GRH5RKqQi2Fc6wVvxK8C2/0
你也可以用过滤功能来做,而且很简单,就像
$startYear = 2019
$endyear = 2020
$startQuartar = 3
$endQuartar = 2
DB::table($table)
->whereBetween('year',[$startYear, $endYear])
->get()->filter(function($query) use
($startYear,$endYear,$startQuartar,$endQuartar){
if($query->year == $startYear and $query->quartar < $startQuartar){
return false;
}
if($query->year == $endYear and $query->quartar > $endQuartar){
return false;
}
return true;
});
帮我查询一下。 我有一个 Laravel 应用程序,其中有一个 table 有 3 列(季度、年份、值)。
quartal | year | value |
---|---|---|
1 | 2019 | 3 |
2 | 2019 | 5 |
3 | 2019 | 5 |
4 | 2019 | 10 |
1 | 2020 | 7 |
2 | 2020 | 5 |
例如,我想获取从 quartal 3 years 2019 到 quartal 2 years 2020 的值 如何查询这个案例? 对于我可以使用的年份,但对于四分之一,这取决于年份。
这是我当前的查询。但效果不是很好
DB::table($table)
->whereBetween('year',[$startYear, $endYear])
->whereBetween('quartal',[$startQuartal, $endQuartal])
->get();
如何将四分之一添加到年份?
DB::table($table)
->whereBetween(
DB::raw('year + (quartal - 1) / 4'),
[
$startYear + ($startQuartal - 1) / 4,
$endYear + ($endQuartal - 1) / 4
]
)
->get();
您需要做的是从 quartal
和 year
创建一个复合列,然后查询它。
DB::table($table)
->whereRaw("concat(year,quartal) >= ?", "$startYear$startQuartal")
->whereRaw("concat(year,quartal) <= ?", "$endYear$endQuartal")
->get();
您可以参考此 SQL 查询 https://www.db-fiddle.com/f/4GRH5RKqQi2Fc6wVvxK8C2/0
你也可以用过滤功能来做,而且很简单,就像
$startYear = 2019
$endyear = 2020
$startQuartar = 3
$endQuartar = 2
DB::table($table)
->whereBetween('year',[$startYear, $endYear])
->get()->filter(function($query) use
($startYear,$endYear,$startQuartar,$endQuartar){
if($query->year == $startYear and $query->quartar < $startQuartar){
return false;
}
if($query->year == $endYear and $query->quartar > $endQuartar){
return false;
}
return true;
});