在SQL语句中组合AND OR?

时间:2018-03-02 04:24:47

标签: php sql laravel-5

使用laravel,这是我的控制器文件中的一些代码:

    public function postsearch(Request $request){

    $searchItem=$request['searchItem'];
    $searchLocation=$request['searchLocation'];

    $criteria=$request['criteria'];

    if($criteria == 'schools'){

    $result=schools::whereRaw("MATCH(name,describtion) AGAINST('$searchItem') AND MATCH(location) AGAINST('$searchLocation')")->where('status','')->get();

    if(count($result)>0){

    $count=count($result);

    return view('schools', array('result' => $result))->with(array('searchItem'=>$searchItem,'searchLocation'=>$searchLocation,'criteria'=>$criteria,'count'=>$count))->with('searchItem',$searchItem); 

    }

    else{

        return view('schools')->with(array('msg'=>'Oops, No result found','count'=>'0','searchItem'=>$searchItem,'searchLocation'=>$searchLocation,'criteria'=>$criteria));

    }

    }

这是我尝试编辑的代码:

  $result=schools::whereRaw("MATCH(name,describtion) AGAINST('$searchItem') AND MATCH(location) AGAINST('$searchLocation')")->where('status','')->get();

如果我正在尝试搜索学校,但我只是输入学校名称而不是位置,我得到0结果。我必须把学校所在的位置放进去。但是我想这样做,以便网站在每个地方显示学校,如果该人不知道该位置。现在,我必须放入学校的位置,以便在结果中显示。

其次,如果学校名称是"佛罗里达州立大学(FSU)",我将不得不输入"佛罗里达州立大学"让学院出现。 "佛罗里达"或者" FSU"不行。有没有办法解决它,以便如果搜索查询与名称的任何部分匹配,数据库中的项目会显示?

更新

不得不花几块钱买一个有效的代码:

        $result=schools::where('<put the variable you are searching for here>', 'LIKE', '%'.$searchItem.'%')
            ->where('location', 'LIKE', '%'.$searchLocation.'%')
            ->where('status','')->orderBy('name', 'asc')->get();

3 个答案:

答案 0 :(得分:0)

试试这个:

$result=schools::whereRaw("MATCH(name,describtion) AGAINST('$searchItem') OR MATCH(location) AGAINST('$searchLocation')")->where('status','')->get();

答案 1 :(得分:0)

$result=schools::whereRaw("MATCH(name,describtion) 
AGAINST('$searchItem') AND MATCH(location) 
AGAINST('$searchLocation')")->where('status','')->get();

替换为

    $result = schools::where(function ($q) use ($searchItem, $searchLocation)
                    {
                        return $q->where('name', 'LIKE', 
                         $searchItem. '%')
                          ->orWhere('description', 'LIKE', '%' . 
                                $searchItem. '%');
                            ->orWhere('location', 'LIKE', '%' . 
                                $searchLocation. '%');
                                     });
   $result->where('status','')->get();

答案 2 :(得分:0)

你可以改变这个

$result=schools::whereRaw("MATCH(name,describtion) 
AGAINST('$searchItem') AND MATCH(location) 
AGAINST('$searchLocation')")->where('status','')->get();

$result=schools::where('name', 'LIKE', '%'.$searchItem.'%')
                 ->orWhere('describtion', 'LIKE', '%'.$searchItem.'%')
                 ->orWhere('location', 'LIKE', '%'.$searchLocation.'%')
                 ->where('status','')->get();

我也注意到你已经写过&#39;描述&#39;。你确定它没有描述吗?还有为什么要检查空字符串的状态?