如何使用 laravel 查询生成器进行复杂查询
How to make complexe query with laravel Query Builder
让我们考虑一下我有这个 table parameters
和一些示例数据的场景。
我需要将这些数据查询成下面描述的三类。
query1 = 获取具有以下内容的所有记录:param1=param2=param3= 100%
从本例开始,输出是第一条记录。此查询没有问题。
query2 = 获取具有以下内容的所有记录:at least param1 < 80 OR param2 < 80 OR param3 < 80 OR all
从本例开始,输出是第二条和第三条记录。
query3 = 获取具有以下内容的所有记录:at least param1 >= 80 OR param2 >= 80 OR param3 >= 80 BUT NOT ALL EQUAL to 100%
从本例开始,输出是第四条和第五条记录。
我真的很喜欢 query2 和 query3。下面是我使用 laravel 查询生成器的查询。
$query = DB::table('parameters');
if ($query === 1) {
$query->where('param1', '=', 100)
->where('param2', '=', 100)
->where('param3', '=', 100);
}elseif ($query === 2) {
$query->where('param1', '<', 80)
->where('param2', '<', 80)
->where('param3', '<', 80);
}else{
$query->whereBetween('param1', [80, 100])
->whereBetween('param2', [80, 100])
->whereBetween('param3', [80, 100]);
}
$result = $query->get();
希望我的问题是清楚的。预先感谢您的帮助。
嘿,你不能在一个查询中使用三个 whereBetween() 而在你的
query2 = 你有没有提到 param1,param2,param3 < 80 查询应该是
$query = DB::table('parameters')
->whereBetween('param1', [0, 80])->get();
同路查询3
$query = DB::table('parameters')
->whereBetween('param1', [80, 100])->get();
对每一列使用查询对所有查询使用规则
使用这个 link - link
已编辑答案
public function getData($id)
{
$query = DB::table('parameters')->find($id);
if($query->param1==100 && $query->param2==100 && $query->param3==100){
}elseif($query->param1<80 or $query->param2<80 or $query->param3<80){
}else{
}
}
正确路由这个函数你会得到输出:)
我认为您使用三个参数的平均值会更容易,因为您需要遵守间隔。
//param_avg = (param1 + param2 + param3)/3;
$query = DB::table('parameters')->get();
//For query 1
$query->where('param1', '=', 100)
->where('param2', '=', 100)
->where('param3', '=', 100);
//For query2
$query->where('param1', '<', 100)
->where('param2', '<', 100)
->where('param3', '<', 100);
//For query3
$query->select(DB::raw('WHERE (param1 + param2 + param3)/3 <=80 AND (param1 + param2 + param3)/3 <100'));
希望对您有所帮助。
让我们考虑一下我有这个 table parameters
和一些示例数据的场景。
我需要将这些数据查询成下面描述的三类。
query1 = 获取具有以下内容的所有记录:param1=param2=param3= 100%
从本例开始,输出是第一条记录。此查询没有问题。
query2 = 获取具有以下内容的所有记录:at least param1 < 80 OR param2 < 80 OR param3 < 80 OR all
从本例开始,输出是第二条和第三条记录。
query3 = 获取具有以下内容的所有记录:at least param1 >= 80 OR param2 >= 80 OR param3 >= 80 BUT NOT ALL EQUAL to 100%
从本例开始,输出是第四条和第五条记录。
我真的很喜欢 query2 和 query3。下面是我使用 laravel 查询生成器的查询。
$query = DB::table('parameters');
if ($query === 1) {
$query->where('param1', '=', 100)
->where('param2', '=', 100)
->where('param3', '=', 100);
}elseif ($query === 2) {
$query->where('param1', '<', 80)
->where('param2', '<', 80)
->where('param3', '<', 80);
}else{
$query->whereBetween('param1', [80, 100])
->whereBetween('param2', [80, 100])
->whereBetween('param3', [80, 100]);
}
$result = $query->get();
希望我的问题是清楚的。预先感谢您的帮助。
嘿,你不能在一个查询中使用三个 whereBetween() 而在你的 query2 = 你有没有提到 param1,param2,param3 < 80 查询应该是
$query = DB::table('parameters')
->whereBetween('param1', [0, 80])->get();
同路查询3
$query = DB::table('parameters')
->whereBetween('param1', [80, 100])->get();
对每一列使用查询对所有查询使用规则 使用这个 link - link
已编辑答案
public function getData($id)
{
$query = DB::table('parameters')->find($id);
if($query->param1==100 && $query->param2==100 && $query->param3==100){
}elseif($query->param1<80 or $query->param2<80 or $query->param3<80){
}else{
}
}
正确路由这个函数你会得到输出:)
我认为您使用三个参数的平均值会更容易,因为您需要遵守间隔。
//param_avg = (param1 + param2 + param3)/3;
$query = DB::table('parameters')->get();
//For query 1
$query->where('param1', '=', 100)
->where('param2', '=', 100)
->where('param3', '=', 100);
//For query2
$query->where('param1', '<', 100)
->where('param2', '<', 100)
->where('param3', '<', 100);
//For query3
$query->select(DB::raw('WHERE (param1 + param2 + param3)/3 <=80 AND (param1 + param2 + param3)/3 <100'));
希望对您有所帮助。