mysql根据某个字段已存在的值排序
巴扎黑
巴扎黑 2017-04-17 16:31:59
0
3
533

因为之前数据库结构没设计好,导致现在数据很混乱。
1.就比如下面那个 values 字段,想让他里面从小到大的排序。
比如第一个变成 ["133","136","257"]
我知道php能做,但是我现在想研究一下mysql相关的函数,请问是否有支持的。。

因为我之前做 批量更新的时候,就发现mysql有这个办法,感觉很强大

巴扎黑
巴扎黑

모든 응답 (3)
伊谢尔伦

写个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应该没什么办法,写个脚本处理下吧。

        최신 다운로드
        더>
        웹 효과
        웹사이트 소스 코드
        웹사이트 자료
        프론트엔드 템플릿
        회사 소개 부인 성명 Sitemap
        PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!