表格 - 列数据
id | filter_data |
---|---------------
1 |2,3,45,67,4 |
2 |2,3,55,33,5,7|
将表单中的变量发布为
$search_filter = {2,3,4,5}
如何获取搜索过滤器中的id
由于
更新:
对不起朋友提出这样一个不好的问题:(
DB design changed,No longer need this :)
答案 0 :(得分:1)
解决方案1:
正如@Jens评论的那样,将值存储为csv是一个糟糕的数据库设计。 所以第一个解决方案是改变你的数据库设计,因为我真的不知道你要存储什么,你的数据库/代码的目的是什么我不能写一个方案或给出任何有意义的建议。
解决方案2:
使用mySQL的find_in_set
功能。
如果字符串str在,则返回1到N范围内的值 字符串列表strlist由N个子串组成。字符串列表是 由“,”字符分隔的子串组成的字符串。如果 第一个参数是一个常量字符串,第二个参数是一个类型的列 SET,FIND_IN_SET()函数被优化为使用位运算。 如果str不在strlist中,或者strlist是空字符串,则返回0。 如果任一参数为NULL,则返回NULL。此功能不起作用 如果第一个参数包含逗号(“,”)字符,则正确。
SELECT id FROM table
WHERE FIND_IN_SET(searchFilterHere, filter_data)
解决方案3:
您可以使用LIKE
运算符。 (有些成员可能会因为建议而杀了我,但是如果你不想改变你的数据库设计 - 这是创造性的选择)。
让我们检查以下代码:
SELECT id FROM table WHERE filter_data LIKE '%2,%'
问题是它会在filter_data列中返回22,
字段的id。
因此,您必须更改该列下的数据,以便,
也将显示为第一个和最后一个字符。
例如:
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,%'
如果您有多个“搜索过滤器”,则可以将LIKE
与OR
运算符合并。