如何使用laravel Query Builder进行复杂查询

时间:2016-02-03 16:26:52

标签: mysql database laravel-5 laravel-query-builder

让我们考虑一下我在这个表DataTable dataTable = (DataTable)dataGridView.DataSource; DataRow drToAdd = dataTable.NewRow(); drToAdd["Field1"] = "Value1"; drToAdd["Field2"] = "Value2"; dataTable.Rows.Add(drToAdd); dataTable.AcceptChanges(); 中的一些样本数据。 enter image description here

我需要将这些数据分为三类,如下所述。

query1 =获取所有记录:parameters,因为此情况下,oupout是第一条记录。这个查询没问题。

query2 =获取所有记录:param1=param2=param3= 100%,因为这种情况下的输出是第二个和第三个记录。

query3 =获取所有记录:at least param1 < 80 OR param2 < 80 OR param3 < 80 OR all,因为此案例中的输出是第四和第五条记录。

我真的在查询2和查询3中存货。 bellow是我使用laravel查询构建器的查询。

at least param1 >= 80 OR param2 >= 80 OR param3 >= 80 BUT NOT ALL EQUAL to 100%

希望我的问题是clair enougth。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分: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'));

希望它会对你有所帮助。

答案 1 :(得分:0)

嘿,你不能在一个查询中使用三个whereBetween()和你的 query2 =你提到了param1,param2,param3&lt; 80查询应该是

$query = DB::table('parameters')
                ->whereBetween('param1', [0, 80])->get();

同样的方式查询3

$query = DB::table('parameters')
                    ->whereBetween('param1', [80, 100])->get();

对每个列使用查询使用所有查询的规则 使用此链接 - 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{

        }

    }

正确布置此功能,您将获得输出:)