在 MySQL 中查询单个列中的多个值
Posted
技术标签:
【中文标题】在 MySQL 中查询单个列中的多个值【英文标题】:Query for multiple values in a single column in MySQL 【发布时间】: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 放在一起。
【参考方案1】:
您可以使用RLIKE
匹配每个流派。
例如,如果您想查找具有流派1,5
的行,您可以运行以下命令:
select * from videos where genre RLIKE '^1$|^1,|,1$|,1,' AND genre RLIKE '^5$|^5,|,5$|,5,';
【讨论】:
它对我不起作用。因为,我有这样的流派 1,2,3,11,22,33 ......所以当我搜索 1 或 2 ......它会获取 1,2,11,22......这是不准确。 这里...我认为 FIND_IN_SET 会完成我的工作...但我需要使用 OR 而不是 AND .....我很困惑...我如何将查询与其他人?以上是关于在 MySQL 中查询单个列中的多个值的主要内容,如果未能解决你的问题,请参考以下文章