Mysql update 分组递增 sql咨询
PHPz
PHPz 2017-04-17 16:38:58
[MySQL讨论组]

id level sort_num
1 1 0
2 1 0
3 2 0
4 2 0
5 2 0
6 3 0
7 3 0
8 3 0
9 3 0

要求得到

id level sort_num
1 1 1
2 1 2
3 2 1
4 2 2
5 2 3
6 3 1
7 3 2
8 3 3
9 3 4

即页面的展示顺序如下

  • level1

    • 1

    • 2

  • level2

    • 1

    • 2

    • 3

  • level3

    • 1

    • 2

    • 3

    • 4

目前的sql

set @index:=0; update t set sort_num = (@index:=@index+1) where level = 1 order by id;
set @index:=0; update t set sort_num = (@index:=@index+1) where level = 2 order by id;
set @index:=0; update t set sort_num = (@index:=@index+1) where level = 3 order by id;

不知有没更简洁的sql可以实现上述的需求?

补充

在线sql

PHPz
PHPz

学习是最好的投资!

全部回复(1)
PHP中文网

如果只是为了页面展示,不需要更新表的数据吧。可以试试下面的sql

select level, @sort_num:=if(@prev_level=t1.level, @sort_num+1, 1)
from 
(select * from t order by id) t1, 
(SELECT @sort_num:=1, @prev_level:=NULL) var
order by id
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号