假设您有一个表格,用于存储人们的音乐喜好,并且您希望用户能够对其偏好进行排名。在插入时,应该自动计算等级字段。然而,稍后,用户应该能够编辑他的排名。
id, memberid, trackid, rank
答案 0 :(得分:2)
您的用户如何对曲目进行排名?他们会在一些用户界面中一个接一个地命令它们吗?
如果是这种情况,我建议将等级编号委托给客户端(接口)。因此,如果您有一个允许用户拖动和移动轨道以按顺序排列它们的界面,只需为它们分配顺序排名,当它们点击保存时,将此信息发送到数据库。
更新:
如果您希望新记录始终排在最后,那么您可以根据问题中的建议获得MAX(rank) WHERE memberid = ?
,然后INSERT
新行rank + 1
。在transaction中包装所有内容将保证atomicity。
答案 1 :(得分:2)
听起来你想在底部自动对新插入的项目进行排名。
INSERT INTO Prefs (MemberId, TrackId, Rank)
SELECT @MemberID, @TrackID,
MAX(ISNULL(Rank,0))+1
FROM Prefs
WHERE MemberId = @MemberID
除了:
为什么不保持rank
null,直到用户实际给每个项目一个排名值?向用户显示所有项目,当他们填写(或不填写!)排名时,然后为每个项目运行UPDATE
语句。
答案 2 :(得分:1)
排名auto increment? 每次进行插入时,它都会增加该字段。喜欢id。
重读你的问题我认为我误解了它。您想要排名是自动的还是用户根据主题设置的字段?如果它是前者我不明白什么是错的。
答案 3 :(得分:0)
我认为你问的问题是“我怎么知道每个用户下一个等级应该是什么?”......但我不确定。
如果是这样,您可以简单地欺骗并在users表中为每个userID保留“max rank”字段。您在插入新排名之前查询该值,并为users表和排名表增加它。
或者,您可以使用“从memberid =?的排名中选择最大(排名)”类型查询让数据库为您计算它。不是最有效的,但对于类似iTunes的数据库,它可能是可管理的(也就是说,只要歌曲*用户的数量不是“太大”)。