84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
因为之前数据库结构没设计好,导致现在数据很混乱。1.就比如下面那个 values 字段,想让他里面从小到大的排序。比如第一个变成 ["133","136","257"]我知道php能做,但是我现在想研究一下mysql相关的函数,请问是否有支持的。。
因为我之前做 批量更新的时候,就发现mysql有这个办法,感觉很强大
写个MySQL函数,在里面拆字符串,排序。
例如可以这样:
CREATE FUNCTION `sort_col`(`input` VARCHAR(50)) RETURNS VARCHAR(50) LANGUAGE SQL NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER COMMENT '' BEGIN declare a int; declare b int; declare c int; set a = cast(substr(input, 3, 3) as int); set b = cast(substr(input, 9, 3) as int); set c = cast(substr(input, 15, 3) as int); if (a <= b && b <= c) then return concat('["', a, '","', b , '","', c , '"]'); elseif (b <= a && a <= c) then return concat('["', b, '","', a , '","', c , '"]'); elseif (c <= a && a <= b) then return concat('["', c, '","', a , '","', b , '"]'); elseif (c <= b && b <= a) then return concat('["', c, '","', b , '","', a , '"]'); elseif (a <= c && c <= b) then return concat('["', a, '","', c , '","', b , '"]'); elseif(b <= c && c <= a) then return concat('["', b, '","', c , '","', a , '"]'); end if; END
然后就可以更新了:
update table_name set values = sort_col(values);
(上面的函数假设了数字都是3位,不用直接用哦)
MySQL 5.7支持JSON了,把字段转成JSON也许可以。
表设计的的时候就应该保证这个值的原子性、这是设计上的失误,mysql不会为这种失误出解决方案吧
靠mysql应该没什么办法,写个脚本处理下吧。
写个MySQL函数,在里面拆字符串,排序。
例如可以这样:
然后就可以更新了:
(上面的函数假设了数字都是3位,不用直接用哦)
MySQL 5.7支持JSON了,把字段转成JSON也许可以。
表设计的的时候就应该保证这个值的原子性、这是设计上的失误,mysql不会为这种失误出解决方案吧
靠mysql应该没什么办法,写个脚本处理下吧。