weixin_37536580
2018-01-08 04:10
采纳率: 21.4%
浏览 1.9k

数据更新字段排序问题!

表中有个顺序字段。假设有一张表有如下两个字段,原始数据为:
1,张三;
2,李四;
3,王五;
4,赵六;
如果这个时候我在前台界面将李四删除,那么对应表中的数据应变为
1,张三;
2,王五;
3,赵六;
或者我在前台界面将李四挪到了王五下面。那么对应的表中的数据应变为
1,张三;
2,王五;
3,李四;
4,赵六

我是写java后台的,我想知道这个如何实现方便,前台都应该传递什么值。业务上面会有上百条记录。并且有可能做多条删除和移动。主要是对表中该顺序字段进行修改。并不仅仅是前台显示顺序。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

17条回答 默认 最新

  • Rui_Cao 2018-01-08 04:20

    你这个做成事件驱动的比较了,你和前台,定一个协议,发送的帧,大概以操作符和相关数据,然后,你后台再解析后做相关的操作就可以了。

    打赏 评论
  • 张小二丶 2018-01-08 04:29

    。。。我看半天愣是没看懂你第二个的逻辑。。是不是写错了?
    按理说每个表都有可以排序的字段,你可以增加一个sort,前端每次修改的时候 告诉你修改排序sort字段就行,你查询根据sort来排序就好

    打赏 评论
  • 看破世界 2018-01-08 04:36

    其实,你同时问了几个问题,我跟你整理下:
    问题1:
    实现删除一个条数据,在页面上显示的顺序依旧 order by id asc 排序 :
    答:
    1,张三;
    2,李四;
    3,王五;
    4,赵六;
    删除李四 , 数据库中拿到的数据 为:
    1,张三;
    3,王五;
    4,赵六;

    而在页面上显示为:
    1,张三;
    2,王五;
    3,赵六;
    这个就简单了, 在页面上一个现在为:

    oid id name
    1 1 张三
    2 3 王五
    3 4 赵六

    oid 为一个后台自动生成序列号(java . net 或者python ,或者前端也有自动生成序列号),
    id 为数据库中你存的id
    name 为数据库中你存的id

    问题2 :或者我在前台界面将李四挪到了王五下面。那么对应的表中的数据应变为
    1,张三;
    2,王五;
    3,李四;
    4,赵六

    答:

    在name 进入数据库 ,update table ser id=3 where name='李四' ,
    update table ser id=3 where name='李四' ,
    update table ser id=2 where name='王五' ,

    打赏 评论
  • 努力才会好 2018-01-08 04:37

    我看半天愣是没看懂你第二个的逻辑。。是不是写错了?
    按理说每个表都有可以排序的字段,你可以增加一个sort,前端每次修改的时候 告诉你修改排序sort字段就行,你查询根据sort来排序就好

    打赏 评论
  • 刘信晨 2018-01-08 04:56

    你给查询出来的数据 加工序列号 不知道能不能解决你的问题

    打赏 评论
  • usecf 2018-01-08 05:05

    增加一个自增的id 然后根据id排序

    打赏 评论
  • 刘信晨 2018-01-08 05:24

    刚刚是了 好像不行 你可以试着在前端写段js代码自动生成一个序列号
    1.图片说明
    2.图片说明
    3.图片说明
    4.图片说明

    打赏 评论
  • Ken-LK 2018-01-08 06:00

    试试用存储过程解决呢

    打赏 评论
  • Edison_kon 2018-01-08 06:34

    这个大概思路 是表中有个sort的字段,对这个排序,前端使用数组的splice 应该就能实现你要的 删除 和换位置的操作了,然后把这个数组拼好,发送到后台去解析就好了

    打赏 评论
  • qq_30356875 2018-01-08 08:03

    给查询出来的数据 加工序列号 试试看

    打赏 评论
  • lixiaozhen007 2018-01-08 15:16

    这个简单的,在后台可以加一个属性,也就是查询的数据的type属性,根据这个排序在前端,这样的,数据可以支持上下移动;查询10条,那就是1-10,之后在前端,按这个排序;

    打赏 评论
  • bill.kq.jia 2018-01-09 02:00

    鉴于你只有上百条记录,以及数据库插入一条记录也是插入到最后,数据库的主键递增策略也不容易直接符合你的要求,那么想达到你的效果,不如每次都清空数据库重新插入数据(当然这些数据是在java代码里面处理好顺序,序号的),这个方法简单粗暴,但是有效,望采纳 ;-)

    打赏 评论
  • 404/404 2018-01-09 02:58

    你添加一个时间字段,如说前台对数据进行操作,创建时间不变,你就进行更新时间,查的时候根据更新时间排序查找呢

    打赏 评论
  • 夫人的泡泡鱼 2018-01-09 09:55

    你的最终目的可能是按照数据库中名字的顺序进行显示并在数据库中将它的顺序号和显示的序号对应。
    建议增加主键,按照姓名select后,在前端按照结果顺序依次读取显示结果。通过主键和姓名条件把显示的序号更新到数据库中。
    请注意:显示的顺序可以在读取数据库后,在前端再进行调整的。

    打赏 评论
  • MangoMiku 2018-01-09 11:30

    给每个name加个id就好了,如何改变顺序,把相应id的顺序改了,在读取表的时候用id的排升序就ok了

    打赏 评论
  • mylwyou 2018-01-11 08:44

    可能你的思路就错了,如果你是需要做排序的话,在修改和删除数据的时候,完全不用去动其它数据的第一个字段

    打赏 评论
  • Ax潜行 2018-01-16 08:59

    如果这个序号不是数据库主键那么保存的时候序号作为一个隐藏的变量存进去作为数据更新就好,js操作,表单提交前给这个变量赋值。
    如果序号是主键,那么你更新数据的时候,就需要分析一下:
    1、删除一条数据,可以看做是这样,把删除数据的id取出来,然后此id以及更大的id对应的对象全都执行赋值id+1的对象的值,
    然后删除最后个对象,最后执行一下操作“alter table users AUTO_INCREMENT= ‘’”;

    2、更改两条数据A、B的位置,临时建一个新对象X,利用X把AB除了主键以外的值对调(这个不用阐述过程了吧),然后把对象更新到数据库。

    这样就可以实现需求了。

    打赏 评论

相关推荐 更多相似问题