weixin_38637161
___rain
采纳率40%
2018-02-10 09:55

mysql 分组排序更新字段的排序号,大神来分析一下

40
已采纳

图片说明
目标是按照每个txtShopCode来更新字段sort类似自增,但是有条件。比如txtShopCode
为1我更新sort字段他有三条记录,我从1到3更新完成,txtShopCode为2的时候更新sort
字段有5条记录,更新的时候要重新从1开始,不懂的再给你讲解一下。望大神指导

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

5条回答

  • u014074697 张大教主 3年前
    我理解你的意思是相同txtShopCode值的记录要按照从1递增更新sort字段值?
    如果这样的话,也简单,但是为了方便更新执行,需要增加一个辅助更新字段,名称:num,更新后可删除该字段
        假定你的表名为 tname
        alter table tname add num INT NOT NULL AUTO_INCREMENT;----增加递增字段
        update tname set sort=1 where 1=1;----先将所有sort字段赋初始值1;
        update tname m  inner join 
        (select a.txtGuid guid,
            (select count(*) from tname where num<=a.num and txtShopCode=a.txtShopCode) sortValue from tname a) n
        on m.txtGuid=n.guid 
        set m.sort=n.sortValue;
        alert table tname drop column num;----删除新增字段num
    
    点赞 评论 复制链接分享
  • ywg369 ywg369 3年前

    什么数据库,看着现有的数据表结构,建的也不够合理,预期单独写sql执行,不如取出数据,用程序来操作,貌似没任何难度,性能还高。可参考下。

    点赞 3 评论 复制链接分享
  • qq_33478558 qq_33478558 3年前

    如果是orcle 可以这样玩:update table t set t.sort=rownum where t.textShpeCode='1' ,oracle和mysql应该差别不大,你可以试试这种方法,我现在的电脑没装mysql,没法测试

    点赞 评论 复制链接分享
  • cashT cashT 3年前

    1,建议做分表处理,假设你的txtShopCode是唯一指向标识,将sort类比为该唯一指向标识的顺延步骤,直接设为自增字段,作为detail信息单独存放在表A中;
    然后再表B(当前表)中做整合;将表A中的sort字段直接赋值给表B中的sort即可;
    2,只对本表操作的话建议尝试设置自增字段,取别名,记录使用,后台直接将唯一标识txtShopCode作为判断是否重新自增条件;
    个人不成熟建议,希望对你有所帮助;个人测试效果如图:
    图片说明

    点赞 评论 复制链接分享
  • b0303 前进的探索者 3年前

    数据库字段更新,你要按照数据不同的类型,要求进行排序。比如你按照某个字段排序就能行。 为了你的积分币来的。希望能帮到你。

    点赞 评论 复制链接分享