MySQL从逗号分隔的字符串中搜索

时间:2015-01-31 16:01:46

标签: mysql sql

我有像这张桌子的结构。

          ID                           Category            Publisher

           1                             1,2                  A
           2                             1                    B
           3                             2                    C
           4                             1                    D
           5                             2                    E
           6                             2,3,1                F

我想要一个查询,当我搜索1,3的类别然后它返回 以下

我尝试过,但没有采用任何优化方式。

          ID                           Category            Publisher

           1                             1,2                  A
           2                             1                    B
           4                             1                    D
           6                             2,3,1                F

2 个答案:

答案 0 :(得分:1)

select * from your_table
where find_in_set(1, category) > 0
or find_in_set(3, category) > 0

但实际上你绝不应该在一个列中存储多个值。更好地改变您的桌面设计。

答案 1 :(得分:0)

虽然纯SQL不提供在两个集之间进行比较的工具,但这可以用代码(JavaScript / PHP)或使用存储过程来实现。

为了使用纯SQL,您可以实现一个存储过程以逗号分隔的字符串作为单列临时表返回(this answerthis post可以为您提供实现此目的的想法一部分)。

然后,利用您创建的内容,假设该功能已实现 STR_SPLIT(<string>, <delimiter>)并返回一个包含名为colName的单个列的表,您可以写:

SELECT DISTINCT `tblName`.*
FROM `tblName`
INNER JOIN STR_SPLIT('1,3',',') `given`
   ON FIND_IN_SET(`given`.`colName`, `category`) > 0

这将获取每个值并单独匹配,这将创建将由DISTINCT语句消除的重复项,使其成为非理想的解决方案。

我建议在这种情况下使用参考表,这将使这个问题变得轻而易举,或者实现部分解决方案并完成代码端。