表 - 列数据搜索交阵列中逗号在MYSQL分隔的列值
id | filter_data |
---|---------------
1 |2,3,45,67,4 |
2 |2,3,55,33,5,7|
邮政变量从形式
$search_filter = {2,3,4,5}
我怎样才能获得id
其在搜索过滤器
谢谢
UPDATE:
对不起朋友如此糟糕的问题:(
DB design changed,No longer need this :)
表 - 列数据搜索交阵列中逗号在MYSQL分隔的列值
id | filter_data |
---|---------------
1 |2,3,45,67,4 |
2 |2,3,55,33,5,7|
邮政变量从形式
$search_filter = {2,3,4,5}
我怎样才能获得id
其在搜索过滤器
谢谢
UPDATE:
对不起朋友如此糟糕的问题:(
DB design changed,No longer need this :)
解决方案1:
由于@Jens评论说,这是一个坏DB设计来存储值为csv。 所以第一个解决方案是改变你的数据库设计,因为我不知道你在存储什么,你的db/code的目的是什么,我不能写一个方案或给出任何有意义的建议。
解决方案2:
使用MySQL的find_in_set
功能。
如果字符串str位于由N个子字符串组成的 字符串列表strlist中,则返回范围为1到N的值。字符串列表是一个 字符串,由以“,”字符分隔的子字符串组成。如果 第一个参数是一个常量字符串,第二个参数是类型为 SET的列,则FIND_IN_SET()函数将优化为使用位算术。 如果str不在strlist中,或者strlist是空字符串,则返回0。 如果任一参数为NULL,则返回NULL。如果第一个参数包含一个逗号(“,”)字符,则该函数不能正常工作 。
SELECT id FROM table
WHERE FIND_IN_SET(searchFilterHere, filter_data)
解决方案3:
可以使用LIKE
操作。 (有些成员可能会因为暗示我而杀了我,但是如果你不想改变你的db设计 - 这是创造性的选择)。
让我们来看看下面的代码:
SELECT id FROM table WHERE filter_data LIKE '%2,%'
的问题是,它会在filter_data的列返回字段的ID与22,
。 因此,您必须更改该列下的数据,因此,
也会显示为第一个和最后一个字符。 例如:
id | filter_data |
---|---------------
1 |,2,3,45,67,4, |
2 |,2,3,55,33,5,7,|
现在你可以做到以下几点:
SELECT id FROM table WHERE filter_data LIKE '%,2,%'
如果您有多个“搜索过滤器”,你可以用OR
运营商LIKE
小号组合。
感谢队友,更新了DB架构!,这让我的生活更轻松 – epynic
将值存储为csv是非常不好的数据库设计 – Jens
下次将记录下谢谢 – epynic
您可以使用函数find_in_set在mysql中查找csv中的值 – Jens