我有一个使用 JavaScript 和 jQuery Sortable 库的项目任务列表,可以轻松地对任务列表项进行拖放排序。
当排序顺序发生变化时,该顺序将保存到 MySQL 数据库中。目前,如果有 100 个任务列表项目,项目编号 2 移动到位置 3。这将使记录 2-100 在数据库中全部更新,任务记录数据库表上有一个 sort_order 列。
这显然不是最有效的解决方案,因为它会导致同时更新大量数据库记录。
另一个问题是,这会导致我的任务记录中的 date_modified 列全部更新,而任务中除了排序顺序号之外没有任何更改,这可能是由其他记录移动位置引起的.显然有很多解决方法,我目前已经编写了一个巨大的复杂 SQL 查询,确保不会更新我的 date_modified 列,除非表中的其他列被修改。
所以这篇文章的目的是探索其他替代方法来存储我在大量记录上的排序顺序。
我的一个想法是创建新的数据库表 task_sort_order,它可以包含列 task_id 和 sort_order。然后,该表将为每个任务记录保存一条记录。这种方法的好处是我的 SQL 将得到简化,因为我不必担心在仅排序顺序发生变化时更新任务记录日期字段。然而,它仍然需要一次更新相同数量的记录。在我原来的例子中,它仍然会在 1 次查询中批量更新 100 条记录中的 99 条记录。不过,它似乎确实比我现在的有好处。
是否有任何其他方法可以改进将大量排序顺序存储到数据库中?
我见过有些人还会以 10 或其他数字为增量保存每个排序顺序号,例如,如果有 5 条记录 1=10, 2=20, 3=30, 4=40 , 5=50 并且记录号 2 移动到位置 4。它将有一个新的排序顺序 1=10, 3=30, 4=40, 2=44, 5=50 因此在本例中,只有第 2 条记录的 sort_order 值会更改并保存到数据库中。
这看起来相当复杂,因为许多记录开始四处移动,最终得到各种奇怪的奇数,而且它还必须以某种方式计算正确的数字以确保新移动的项目与之前移动的项目不冲突项目。
正如您所见,我乐于听取任何关于其他方法的想法,甚至是改进我当前方法的方法?
最佳答案
我认为你的问题在于你如何在数据库中存储订单的缺点。两个想法:
您可以尝试在您的关系数据库架构中实现链表的概念,即,您为每个项目存储对下一个项目的“引用”。通过这种方式,您只需在每次重新排列时更新几条记录。
您可以使用 Neo4j 或 OrientDB 等图数据库,其中链表只是数据库 native 支持的可能数据输入链接之一。
关于javascript - 在 JavaScript 和 MySQL 中存储列表排序顺序的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33317721/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun