【发布时间】:2021-10-28 15:06:07
【问题描述】:
我使用这样的分隔符(“1,5,10”)在 MySQL 列中存储多个数字。我不知道这不是存储数据的好方法,但现在我别无选择。
反正我有一张这样的桌子:
MovieID | genre
------------------------------------
1 1,2,3
2 2,4
3 1,2
4 2,5,10
我想按流派 ID 过滤电影。例如,如果我搜索流派 id 1,2,将获取所有包含这些流派 id 的电影。
我试过了:
AND FIND_IN_SET('".$genre_list."',genre) > 0
AND genre IN('".$genre_list."')
AND genre LIKE('%".$genre_list."%')
但没有任何效果。
我是这样做的:
function make_query($minimum_rating, $maximum_rating, $category, $country){
$query = "
SELECT * FROM videos
WHERE publication = '1'
";
if (isset($minimum_rating, $maximum_rating) && !empty($minimum_rating) && !empty($maximum_rating)) {
$query .= "
AND imdb_rating BETWEEN '".$minimum_rating."' AND '".$maximum_rating."'
";
}
if (isset($category)) {
// $category_filter = implode("','", $category);
foreach ($category as $cat){
$query .= "
AND FIND_IN_SET('$cat', genre) > 0
";
}
}
if (isset($country)) {
$country_filter = implode("','", $country);
$query .= "
AND country IN('".$country_filter."')
";
}
return $query;
}
它只显示包含类型的电影,例如数组包含 1,2,3。它获取 MovieID 1。
我的预期结果是 MovieID 1,2,3,4
【问题讨论】:
-
$genre_list是什么类型的变量?您是否先使用值验证了您的示例? -
重复问题是关于使用
AND搜索找到所有多个值的情况。如果您希望多个值中的任何一个匹配,则使用OR,否则它将是与重复问题中的一个类似的解决方案。 -
@Sam020 它是一个字符串..
-
@BillKarwin 请看一下...我已经根据我的场景编辑了这个问题。
-
如果您不仅向我们展示了 PHP,而且还向我们展示了您尝试过的完整 SQL,这将很有帮助。如果你得到正确的 SQL,你可能会更好地理解如何将查询与 PHP 放在一起。
标签: php mysql sql codeigniter