2

让我们考虑一下我有这个表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();

希望我的问题足够清楚。在此先感谢您的帮助。

4

2 回答 2

1

我认为使用三个参数的平均值会更容易,因为你有一个要尊重的间隔。

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

希望它会帮助你。

于 2016-02-04T11:14:33.487 回答
0

嘿,你不能在一个查询中使用三个 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();

对每一列使用查询使用规则所有查询都使用此链接 -链接

编辑的答案

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{

        }

    }

正确路由此功能,您将获得输出:)

于 2016-02-03T17:26:50.570 回答