繁体   English   中英

以逗号分隔的列值搜索帖子数组

[英]Search post array in comma separated column value

表 - 列数据

id | filter_data |
---|---------------
1  |2,3,45,67,4  |
2  |2,3,55,33,5,7|

从表单发布变量为

$search_filter = {2,3,4,5}

如何获取搜索过滤器中的id

解决方案1:

正如@Jens 评论的那样,将值存储为 CSV 是一种糟糕的数据库设计。 所以第一个解决方案是改变你的数据库设计,因为我真的不知道你在存储什么以及你的数据库/代码的目的是什么我无法编写方案或给出任何有意义的建议。

解决方案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运算符。 (有些成员可能会因为建议而杀了我,但如果你不想改变你的数据库设计 - 这是一个创造性的选择)。

让我们检查以下代码:

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,%'

如果您有多个“搜索过滤器”,您可以将LIKEOR运算符结合使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM