我想知道在这种情况下是否需要锁定表(我使用的是Coldfusion和MySQL):
wishlists(memberId, gameId, rank, updateAt)
会员在个人列表中存储游戏的地方。
wishlists
有一个男人对许多人
members
一张桌子,一对多
games
桌子。许多成员在这个列表中存储了许多游戏。这些游戏使用int字段进行排名。等级对成员来说是特殊的,所以:
Member 1 can have itemId=1, rank=1; itemId=2, rank=2
Member 2 can have itemId=1, rank=1, itemId=2, rank=2
etc...
每个成员都可以通过删除项目或更改项目的排名来修改其列表(
,例如)。这意味着每次对列表进行更改时,必须重新对列表进行排序。我编写了一个单独的函数
rankList()
删除游戏源列表()
发送游戏topoflist()
1. Gets a memberWishlist query of all records @memberId ordered first by **rank ASC**, then **updateAt ASC** fields
2. Loops through memberWishlist query and sets each row's **rank=memberWishlist.RecordCount**
updateAt字段是必要的,因为如果一个游戏被移动到列表的顶部,我们将有两个排名第一的项目,为了区分它们,我使用updatedAt。
:一个成员的列表中有100个游戏:
-
成员将项移到顶部;在操作完成后调用rankList()。
-
在普通的页面请求中,这很好,因为在rankList()完成之前,页面不会重新加载。但是如果是ajax,或者使用cfthread,成员可以通过快速点击在5秒内删除10个游戏。然后,不管怎样,删除后列表会重新排序,所以这可能无关紧要;但似乎这是我应该保护的。。。
情景2:
感谢你的想法。
附加信息:新项目在插入时自动排在最后