Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql在条件允许的情况下多次运行_Mysql - Fatal编程技术网

MySql在条件允许的情况下多次运行

MySql在条件允许的情况下多次运行,mysql,Mysql,我正在使用Where In条件执行MySQL查询 这是我的问题 查询应为: SELECT * FROM users WHERE id IN (44,44,33,44,33,0); 显示正确结果的查询,没有问题, 但我想做的是,我们可以将所有id与各个条件分开吗? 或者对于一个单列,一个查询可以有多个,其中? 像 从id位于(44)中的用户中选择* 和(45)中的id 和id(46) 像这样 这可能吗 我执行查询的查询代码,以Laravel为单位 $films = Film::with('gen

我正在使用Where In条件执行
MySQL查询

这是我的问题

查询应为:

SELECT * FROM users WHERE id IN (44,44,33,44,33,0);
显示正确结果的查询,没有问题, 但我想做的是,我们可以将所有id与各个条件分开吗?

或者对于一个
单列
,一个查询可以有多个
,其中
? 像

从id位于(44)中的用户中选择* 和(45)中的id 和id(46)

像这样

这可能吗

我执行查询的查询代码,以Laravel为单位

$films = Film::with('genre')->with('languages')->with('likes')->with('comments')->with('likedBy');

        if(Input::get('sort')){
            $sort = Input::get('sort');
            switch ($sort){
                case 'old_new':
                    $films = $films->orderBy('created_at', 'asc');
                    break;
                case 'new_old':
                    $films = $films->orderBy('created_at', 'desc');
                    break;
                case 'views':
//                    $films = DB::table('films')
//                        ->leftJoin('film_views', 'films.id', '=', 'film_views.film_id')
//                        ->select(DB::raw('films.*, count(film_views.film_id) as views'))
//                        ->groupBy('films.id')
//                        ->orderBy('views' , 'desc')
//                        ;

                    $films = $films
                        ->leftJoin('film_views', 'films.id', '=', 'film_views.film_id')
                        ->select(DB::raw('films.*, count(film_views.film_id) as views'))
                        //->whereBetween('created_at', [$this->first_day_of_search, $this->final_day_of_search])
                        ->groupBy('films.id')
                        ->orderBy('views' , 'desc')
                    ;

                    break;
                case 'likes':
                    $films = $films
                        ->leftJoin('film_likes', 'films.id', '=', 'film_likes.film_id')
                        ->select(DB::raw('films.*, count(film_likes.film_id) as likes'))
                        ->groupBy('films.id')
                        ->orderBy('likes' , 'desc')
                       ;
                    break;
            }


        }
        if(Input::get('filter')) {
            $jsonFilter = Input::get('filter');
            $filters = json_decode($jsonFilter);

            foreach ($filters as $filter => $value){
                switch ($filter){
                    case "genre":
                        if($value){
                            $films = $films->whereHas('genre', function ($query) use($value) {
                                $query->whereIn('genre_id', $value);
                            });
                        }
                        break;
                    case "cert":
                       if($value){
                           $films = $films->whereIn('cert', $value);
                       }
                        break;
                    case "country":
                        if($value){
                            $films = $films->whereIn('country', $value);
                        }
                        break;
                    case "lang":
                       if($value){
                           $films = $films->whereHas('languages', function ($query) use($value) {
                               $query->whereIn('language_id', $value);
                           });
                       }
                        break;
                }
            }


        }



        $films = $films->paginate(5);

        return parent::api_response($films->toArray(), true, ['return' => 'all films'], 200);

是的,在中可以有多个

SELECT * FROM users WHERE id IN (44) OR id IN (45) OR id IN (46);
这是正确的


但是,我不明白您为什么要这样做,因为与在中使用一个相比,它的性能较低。如果不是出于娱乐的原因,我将发布一个答案。我认为,
WHERE IN
子句在内部被转换成一系列由
分隔的相等条件。那么您最初的查询是什么

SELECT * FROM users WHERE id IN (44,44,33,44,33,0)
将在内部转换为此

SELECT * FROM users WHERE id = 44 OR id = 44 OR id = 33 OR id = 44 OR
                          id = 33 OR id = 0
因此,在
子句中为
指定一个数字相当于一个相等条件


顺便说一句,相同的数字多次出现,这没有任何意义。

您可以按
定制订单。您可以创建一个尾随列,该列具有基于id范围(如段)的值,并将该列用于自定义。@Drew,实际上我必须将所有id放入foreach中,然后进行查询,不希望在条件中使用逗号分隔的值,不,我将
order by
称为自定义。。。所以,当@Drew Good Night(晚上好)的时候,你后面的专栏可能是一个
案例,你应该回答更多。这是非常荒谬的。对不起,没有得到你的支持。我真的应该取消我的反对票。问题是问题,不是这么多。但这仍然是荒谬的。假设
条款中的
是92项。它看起来像什么?德鲁:我看到他问“一个查询可以在一个列中有多个Where-In吗?”我说是的,除了这个,还有其他方法?