[SQL] 가져 오기 이전 / 다음 기록 : 레일
SQL가져 오기 이전 / 다음 기록 : 레일
내 응용 프로그램은 사용자에 속하는 사진이있다.
사진 # 쇼에서 나는 "이 사용자의 추가"를 보여주고, 그 사용자로부터 다음과 이전 사진을 보여주고 싶습니다 볼 수 있습니다. 나는 이러한 ID 명령 또는 created_at 위해 이전 / 다음 사진 이전 / 다음 사진 인과 잘 될 것입니다.
어떻게 다수의 이전 / 다음 사진을 하나의 이전 / 다음 사진을 쿼리의 종류를 작성하거나까요?
해결법
-
==============================
1.이 시도:
이 시도:
class User has_many :photos end class Photo belongs_to :user def next user.photos.where("id > ?", id).first end def prev user.photos.where("id < ?", id).last end end
지금 당신은 할 수 있습니다 :
photo.next photo.prev
-
==============================
2.그것은뿐만 아니라 내 문제에 대한 해결책에 저를지도한다. 나는 항목, 반군 단체에 대한 다음 / 이전을 만들려고 노력했다. 내 모델에서이 같은 일을 결국 :
그것은뿐만 아니라 내 문제에 대한 해결책에 저를지도한다. 나는 항목, 반군 단체에 대한 다음 / 이전을 만들려고 노력했다. 내 모델에서이 같은 일을 결국 :
def next Item.where("id > ?", id).order("id ASC").first || Item.first end def previous Item.where("id < ?", id).order("id DESC").first || Item.last end
이 방법은 그것이 첫 번째와 다른 방법의 주위로 이동 마지막 항목에서, 주변 루프. 나는 나중에 내보기에 item.next @ 전화를 그냥.
-
==============================
3.확실하지이 3.2 이상 레일에 변화가 대신의 경우 :
확실하지이 3.2 이상 레일에 변화가 대신의 경우 :
model.where("id < ?", id).first
이전합니다. 너가해야되는
.where("id > ?", id).last
그것은 당신이 3 개 항목이있는 경우 현재보다 낮은 때문에, 그래서 먼저, 다음 "첫 번째는"1, 당신에게 [1,3,4]을 DB의 첫 번째 레코드를주는 "에 의해 순서가"잘못된 것 같다하지만, 마지막 있다는 것은 당신이 찾고 도자기 하나입니다. 당신은 또한 어디에 이후에 정렬을 적용하지만, 추가 단계를 먹으 렴 수 있습니다.
-
==============================
4.
class Photo < ActiveRecord::Base belongs_to :user scope :next, lambda {|id| where("id > ?",id).order("id ASC") } # this is the default ordering for AR scope :previous, lambda {|id| where("id < ?",id).order("id DESC") } def next user.photos.next(self.id).first end def previous user.photos.previous(self.id).first end end
그럼 당신은 할 수 있습니다 :
photo.previous photo.next
-
==============================
5.이 작업을해야합니다, 나는 그냥 다음 또는 이전에 도착하는 것이 현재의 위 또는 아래 모든 레코드를 검색하지 않는다는 점에서 다른 솔루션보다 더 효율적이라고 생각 :
이 작업을해야합니다, 나는 그냥 다음 또는 이전에 도착하는 것이 현재의 위 또는 아래 모든 레코드를 검색하지 않는다는 점에서 다른 솔루션보다 더 효율적이라고 생각 :
def next # remember default order is ascending, so I left it out here Photo.offset(self.id).limit(1).first end def prev # I set limit to 2 because if you specify descending order with an # offset/limit query, the result includes the offset record as the first Photo.offset(self.id).limit(2).order(id: :desc).last end
나는 누군가가 그것을보고 희망 ...이 이제까지에 StackOverflow에 게시 내 첫 번째 대답이며,이 질문은 꽤 오래 :)
-
==============================
6.당신은 어디 방법에 대한 몇 가지 옵션을 전달할 수 있습니다 :
당신은 어디 방법에 대한 몇 가지 옵션을 전달할 수 있습니다 :
다음 사진 :
Photo.where(:user_id => current_user.id, :created_at > current_photo.created_at).order("created_at").first
이전 사진
Photo.where(:user_id => current_user.id, :created_at < current_photo.created_at).order("created_at").last
내가 처음 / 마지막 혼합 최대가있을 수 있습니다.
-
==============================
7.당신은 Nexter을 확인 할 수 있습니다. 대신 모델의 하드 코딩 하나에 의존하는 모든 동적으로 생성 범위에서 작동합니다.
당신은 Nexter을 확인 할 수 있습니다. 대신 모델의 하드 코딩 하나에 의존하는 모든 동적으로 생성 범위에서 작동합니다.
-
==============================
8.
class Photo < ActiveRecord::Base belongs_to :user default_scope { order('published_at DESC, id DESC') } def next current = nil user.photos.where('published_at >= ?', published_at).each do |p| if p.id == id then break else current = p end end return current end def previous current = nil user.photos.where('published_at <= ?', published_at).reverse.each do |p| if p.id == id then break else current = p end end return current end end
질문에 대한 답변은 이미 여기에 내 경우를 제공하지 않은 것으로 나타났다. 게시 된 날짜를 기준으로 다음 이전 또는를 원하지만 일부 사진은 같은 날짜에 게시되는 것을 상상해보십시오. 이 버전의 의지가 페이지에 렌더링 순서대로 사진을 통해 루프, 그리고 이전과 컬렉션의 현재 후에 사람을.
-
==============================
9.다음 코드로 응용 프로그램 / 모델 / application_record.rb 수정 :
다음 코드로 응용 프로그램 / 모델 / application_record.rb 수정 :
class ApplicationRecord < ActiveRecord::Base self.abstract_class = true def next self.class.where("id > ?", id).order("id ASC").first || self.class.first end def previous self.class.where("id < ?", id).order("id DESC").first || self.class.last end end
그럼 당신은 모든 모델에 () 다음 ()를 사용하고 이전 할 수 있습니다.
from https://stackoverflow.com/questions/7394088/rails-get-next-previous-record by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] ORA-00054 : NOWAIT와 자원 바쁜 취득 지정 (0) | 2020.07.23 |
---|---|
[SQL] 내가 어떻게 벤치마킹을 위해 오라클 실행 계획 캐시를 삭제합니까? (0) | 2020.07.23 |
[SQL] 이름 바꾸기 SQL 서버 스키마 (0) | 2020.07.23 |
[SQL] 선택하여 쿼리 결과에 행을 추가합니다 (0) | 2020.07.23 |
[SQL] 같은 서버의 다른 데이터베이스의 백업에서 새 데이터베이스 만들기? (0) | 2020.07.22 |