mysql根据某个字段已存在的值排序

查看:393
本文介绍了mysql根据某个字段已存在的值排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

因为之前数据库结构没设计好,导致现在数据很混乱。
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根据某个字段已存在的值排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆