Положение объекта в базе данных - PullRequest
0 голосов
/ 04 мая 2010

У меня есть модель Team, и у меня есть (т.е.) team = Team.first :offset => 20. Теперь мне нужно получить номер позиции моего team в таблице дб.

Я могу сделать это в ruby:

Team.all.index team #=> 20

Но я уверен, что смогу написать это на SQL, и для больших таблиц это будет дешевле для меня.

Ответы [ 2 ]

1 голос
/ 04 мая 2010

При условии, что заказ сделан по ID desc:

class Team < ActiveRecord::Base
  def position
    self.class.count(:conditions => ['id <= ?', self.id]) 
  end
end
0 голосов
/ 04 мая 2010

Я не уверен, что следую, но будет ли много использоваться значение позиции, возможно, стоит убедиться, что оно установлено при сохранении. Изменится ли команда со временем или она статична?

Я не думаю, что положение записи в базе данных - это одна из вещей, которую действительно заботит база данных, эти типы данных должны быть на ваше усмотрение.

В зависимости от базы данных вы можете использовать предложение LIMIT, но не можете использовать его для поиска позиции определенной строки. Например, просто выбрать строки с номерами от 20 до 21, но они будут различаться в зависимости от порядка сортировки.

SELECT * FROM teams LIMIT 20,21

Я думаю, что установка атрибута позиции на вашей модели или наличие модели соединения - это путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...