我正在执行MySQL query with Where In conditions
.
这是我的查询。
查询应该是:
SELECT * FROM users WHERE id IN (44,44,33,44,33,0);
查询显示我的正确结果,没有问题,但是我想做的是我们可以用单个条件划分所有id吗?
或者一个查询可以有多个Where In
对应一个single column
?像
SELECT * FROM users WHERE id IN (44)AND id IN (45)
这样的。
这可能吗??
我的查询代码执行查询,它在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);
如果不是为了娱乐,我会贴出答案。我认为一个WHERE IN
子句在内部被转换成一系列由OR
分隔的相等条件。那么你原来的查询
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
因此,为您的IN
子句提供单个数字将相当于单个相等条件。
顺便说一下,你有相同的数字出现多次,这没有任何意义。
是的,可以有多个WHERE IN
。
SELECT * FROM users WHERE id IN (44) OR id IN (45) OR id IN (46);
正确。
但是我不明白你为什么要这样做,因为与在