2010-03-05 1 views
0

큰 조건으로 SQL 쿼리에 조건을 부과 할 수 있습니까?SQL 또는 Ruby on Rails 질문 : 검색 결과를 두 조건 중 더 큰 값으로 제한

예를 들어, 게시물이있는 사이트를 상상해보십시오. 결과가 지난 24 시간 내에 작성된 모든 게시물과 최소 10 개의 게시물을 모두 포함하도록 보장 될 수 있도록 게시물을 요청할 수있는 방법이 있습니까?하지만 한도를 불필요하게 초과하지는 마십시오.

즉, 이미 지난 24 시간 내에 게시물이 모두 있지만 10 개의 게시물이 아닌 경우 10 개가 될 때까지 게시물을 계속 추가하거나 이미 10 개의 게시물이 있지만 과거에 만든 모든 게시물이 아닌 경우 24 시간이 지난 후에도 24 시간까지 계속되지만 25 시간 전과 10 시간 이후의 게시물을 모두 갖지 않습니다.

편집 : 내 모델 게시 요청에 대한 응답으로. 모델을 게시하는 방법을 정확히 모르겠다. 레일즈에서 모델을 만들었 기 때문이다. 그러나 간단히 말해서 Post에는 created_at datetime 행이 있으며 여기에 인덱스가 있습니다.

+0

어떤 데이터베이스를 사용하고 있습니까? –

+0

나는 Postgres –

+0

모델을 게시하고있다. – eKek0

답변

1

생각해 보면 LIMIT은 상수를 필요로하지만 created 필드에 색인이있는 경우 한쪽 끝에서 몇 개의 레코드를 가져 오는 것이 매우 효율적입니다. 맞습니까? 어떻게 (SQL 틱 의사 코드) 같은 것에 대해 :

select * from posts 
where created > min(one_day_ago, 
        (select created from posts 
        order by created desc 
        limit 1 offset 10)); 
+0

Postgres 문서에서 아무것도 찾을 수 없다. 일반적으로 오프셋이 실제 레코드 수보다 크거나, 숫자가 충분하지 않은 경우 어떻게되는지 정의되어있다. 최소 기록을 충족 시키는가? –

+0

오, 잘 부탁드립니다. 내부 SELECT는 빈 집합을 반환하므로 처리 할 항목을 추가해야합니다. – Ken

0

은 아마도 깨끗한 솔루션은 10 가장 최근에 반환하는 선택을하는 마지막 날에 대한 모든 것을 반환하고 이들의 조합을 사용하는 또 다른 선택이다 두 개가 선택됩니다.

이러한 유니온 된 선택 중 하나는 항상 다른 하나를 완전히 포함 할 것이므로 가장 효율적일 수는 없지만 그것이 내가하는 일이라고 생각합니다.