mysql find_in_set数组分隔符

时间:2018-11-08 15:32:25

标签: mysql sql

我的列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 个答案:

答案 0 :(得分:2)

与其尝试将[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的处理能力。