MySql在条件允许的情况下多次运行
我正在使用Where In条件执行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
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吗?”我说是的,除了这个,还有其他方法?