我存储了 user_orders 列
[1][2][3][5] // Expected output 1,2,3,5
[25][27] // Expected output 25,27
[2] // Expected output 2
我不明白为什么我的主存储像上面的格式而不是逗号分隔符数据,这是出于安全原因吗?
如何将其替换为 1,2,3,5 以在 find_in_set(u.id, c.user_orders) 中使用?
我在下面的网址上尝试过
https://stackoverflow.com/questions/27262855/mysql-find-in-set-slash-separator
最佳答案
与其尝试将[1][2][3][4]
转换为CSV格式,更简单的方法是使用REGEXP
。例如,如果您想搜索 id 3,您可以使用:
SELECT *
FROM yourTable
WHERE user_orders REGEXP '[[:<:]]3[[:>:]]';
如果您确实想将数据转换为纯 CSV,您可以进行一系列替换,例如
SELECT *
FROM yourTable
WHERE FIND_IN_SET('3', REPLACE(REPLACE(REPLACE(user_orders, '][', ','),
'[', ''), ']', '')) > 0;
但一般来说,您应该避免存储 [1][2][3][4]
或 1,2,3,4
,因为两者都是未规范化的数据,从而极大地限制了 MySQL 的处理能力。
关于mysql find_in_set 数组分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53211012/