在 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 中查询单个列中的多个值的主要内容,如果未能解决你的问题,请参考以下文章

从提取多个值的列中查询单个值

如何使用 REPLACE() 替换 mysql SELECT 查询中 1 列中的多个值?

如何在单个查询 (PSQL) 中更新一列中的不同值?

列中多个值和范围的 SQL SELECT 查询

MySQL查询用下划线替换列中的空格

Python:在一列中为另一列中的单个值显示多个值