>

다발의 데이터를 선택하는 쿼리를 수행하고 싶지만 매 세 번째 레코드 또는 심지어 매 100 번째 레코드 만 선택하여 해당 데이터의 해상도를 낮출 수 있기를 원합니다. 기록 또는 무엇이든.

ActiveRecord를 사용하여이 작업을 수행하는 간단한 방법이 있습니까?


  • 답변 # 1

    Oracle에서는 다음과 같이 작성합니다 :

    YourModel.find(:conditions => 'MOD(ROWNUM,3) = 0')
    
    

    이것은 데이터베이스에서 필터가 발생한다는 장점이 있으므로 모든 것이 검색되지는 않습니다.

    PostgreSQL에서는 이것을 ROW_NUMBER 라고합니다.  (실제로 SQL 표준입니다). MySQL에서는 지원되지 않습니다.

    mysql에서는 SELECT @rownum:=@rownum+1 rownum, t.* FROM (SELECT @rownum:=0) r, mytable t; 를 사용하여 rownum을 모방 할 수 있습니다 .

    와 같은 것 같아요
    Bar.find_by_sql("select * from (SELECT @rownum:=@rownum+1 rownum, t.* FROM (SELECT @rownum:=0) r, mytable t) where mod(rownum,3) = 0")
    
    

    작동해야합니다.

  • 답변 # 2

    모델에 id 와 같이 오름차순 행이있는 경우  숫자를 놓치지 않고 다음과 같이 할 수 있습니다 :

    Model.all(:condition => "models.id%3=0")
    
    

    만약 당신이 먼저 데이터베이스에서 모든 행을 가져올 수 있다면 다음과 같이 할 수 있습니다 :

    models = Model.all
    third_models = models.reject{ |model| models.index(model) % 3 != 0 }
    
    

  • 이전 android - SMS에서 브로드 캐스트 수신기가 작동하지 않습니다
  • 다음 distribution - 배포/distutils는 파이썬 버전을 지정합니다