当行号和id不同步时如何增加记录?

发布于 2024-10-21 18:11:56 字数 565 浏览 4 评论 0原文

当您删除数据库中的一些先前记录时,自动递增的记录 ID 和后续记录的行号将不同步。

那么,如何从给定的记录开始并有效地递增到下一条记录呢?

如果您使用记录 ID,则可能会遇到已删除的 ID。
如果您使用类似 User.first(:offset => user_id) 的内容,那么您可能会丢失一些记录。自从 在给定记录上,user_id 可能高于行号(由于先前的记录已被删除)。

我发现的唯一解决方案是每次增加所有记录, 但这似乎效率很低:

user_id = params[:id].to_i
users = User.all
next_user = nil
next_cond = false
users.each do |u|
  if u.id == user_id
    next_cond = true
  elsif next_cond
    next_user = a
    break
  end
end

那么,如何有效地获取下一条记录呢? 例如,有没有办法获取给定记录的行号?

注意:我在本地使用 SQLite,在服务器上使用 MySQL。

When you have deleted some previous records in the DB, the auto-incremented record ID and the row number of the later records gets out of sync.

So, how do start from a given record and efficiently increment to the next record?

If you use the record ID, you might hit an ID that has been deleted.
If you use something like User.first(:offset => user_id) then you might miss some records. Since
on a given record the user_id might be higher than the row number (as a result of previous record(s) having been deleted).

The only solution I've found is to increment through all records each time,
but that seems very inefficient:

user_id = params[:id].to_i
users = User.all
next_user = nil
next_cond = false
users.each do |u|
  if u.id == user_id
    next_cond = true
  elsif next_cond
    next_user = a
    break
  end
end

So, how do you efficiently get the next record?
Is there a way to get the row number of a given record, for instance?

NB: I am using SQLite locally, and MySQL on the server.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

黑色毁心梦 2024-10-28 18:11:56
User.where("id > ?", user_id).order("id ASC").first
User.where("id > ?", user_id).order("id ASC").first
仙女 2024-10-28 18:11:56

听起来您想要一个分页解决方案。

will_paginate 是我熟悉的最好的解决方案,但它有点旧,而且我有一段时间没有检查是否有更好的解决方案出现。

http://railscasts.com/episodes/51-will-paginate

It sounds like you want a pagination solution.

will_paginate is the best solution I'm familiar with, but it's kind of old, and I haven't checked in a while if a better one has come along.

http://railscasts.com/episodes/51-will-paginate

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文