mysql – 在数据库中的一组记录上存储排序顺序的最有效方法是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 在数据库中的一组记录上存储排序顺序的最有效方法是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1390字,纯文字阅读大概需要2分钟。
内容图文
![mysql – 在数据库中的一组记录上存储排序顺序的最有效方法是什么?](/upload/InfoBanner/zyjiaocheng/889/c72f9633f3c249678e5292ac32e87969.jpg)
假设PHP / MYSQL,但我不一定需要实际的代码,我只是对它背后的理论感兴趣.
一个很好的用例是Facebook的照片库页面.您可以在页面上拖放照片,这会触发Ajax事件以保存新的排序顺序.我正在实现非常相似的东西.
例如,我有一个数据库表“照片”,大约有一百万条记录:
相片
id:int,
userid:int,
albumid:int,
sortorder:int,
filename:varchar,
title:varchar
假设我有一张包含100张照片的相册.我将照片拖放到新位置,并启动Ajax事件以保存在服务器上.
我应该将整个照片ID数组传递回服务器并更新每条记录吗?假设通过“WHERE userid = loggedin_id”进行输入验证,因此恶意用户只能处理自己照片的排序顺序
我是否应该传递照片ID,其先前的排序顺序索引及其新的排序顺序索引,检索这两个索引之间的所有记录,对它们进行排序,然后更新它们的订单?
如果单个图库中有数千张照片并且排序顺序发生了变化,会发生什么?
解决方法:
如何使用定义顺序的整数列呢?默认情况下,您指定数字* 1000,如1000,2000,3000 ….如果您在1000和2000之间移动3000,则将其更改为1500.因此,在大多数情况下,您根本不需要更新其他数字.我使用这种方法,效果很好.您也可以使用double但是您无法控制精度和舍入误差,因此请不要使用它.
所以算法看起来像:比如说你把B移到A之后的位置.首先执行选择以查看A旁边的记录的顺序.如果它比A的顺序至少高2,那么你只需将B的顺序设置为适合介于两者之间但如果它只有1(在A之后没有空格),你选择B的边界记录来查看这边有多少空间,除以2,然后将这个值加到A和A之间的所有记录的顺序上.那就是它!
(请注意,对于包含多个查询的任何算法,您应该使用事务/锁定,因此这也适用于这种情况.最简单的方法是使用InnoDB事务.)
内容总结
以上是互联网集市为您收集整理的mysql – 在数据库中的一组记录上存储排序顺序的最有效方法是什么?全部内容,希望文章能够帮你解决mysql – 在数据库中的一组记录上存储排序顺序的最有效方法是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。