mysql find_in_set 数组分隔符

标签 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][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/

相关文章:

php - Symfony2/Doctrine2 中的枚举启用问题

mysql - 有人可以告诉我 slugging percentage 查询有什么问题吗?

php - 如何在 PHP 中将 printf 添加到成功的查询返回中

mysql - SQL Join 因 CodeIgniter 失败

sql - 如何使用'as'关键字为Oracle中的表添加别名?

php - 如何创建sql文件?

php - 加入其他表的数据透视表

sql - 从 SQL Server 中的 JSON 文本中提取值

mysql - 为什么在更改行格式时我的表大小没有减小?

php - 将数据保存到远程数据库