2012-12-21 6 views
0

ThinkingSphinx를 사용하여 시작 날짜가 범위 내에 있거나 종료 날짜가 같은 범위, 기본적으로이 범위에서 시작되거나 끝나는 모든 레코드를 반환하려고합니다. 이렇게하려면thinkinSphinx 쿼리가 4 가지 조건으로 sphinx_select와 작동하지 않습니다.

, 나는 다음과 같이 (두 개의 레코드가있는 가정 this post이 날짜 범위에 대한 제안 무엇과 함께 per the documentation로 계산 된 속성과 sphinx_select을 사용하고, record_a의 범위 밖에서 시작하지만, 범위 및 record_b 내 종료 시작 및 범위 끝) : 나는 단지 start_at 조건을 사용하는 경우

with_display = "*, IF(start_at >= #{range_start.to_i}, 1, 0) + " + 
        "IF(start_at <= #{range_end.to_i}, 1, 0) + " + 
        "IF(end_at >= #{range_start.to_i}, 10, 0) + " + 
        "IF(end_at <= #{range_end.to_i}, 10, 0) AS display" 
{ 
    sphinx_select: with_display, 
    with: {'display' => [2, 20, 22]}, 
} 
=> [record_b] 

그러나, 나는 하나 개의 레코드를 얻을, 나는 단지 end_at 조건을 사용하는 경우, 그것은 모두 레코드를 반환합니다. 내가 올바르게 이해 해요 경우 record_a 20의 display 값이 있어야하기 때문에 record_b (22)의 display 값이 있어야합니다 동안

with_display = "*, IF(start_at >= #{range_start.to_i}, 1, 0) + " + 
        "IF(start_at <= #{range_end.to_i}, 1, 0) AS display" 
=> [record_b] 

with_display = "*, IF(end_at >= #{range_start.to_i}, 10, 0) + " + 
        "IF(end_at <= #{range_end.to_i}, 10, 0) AS display" 
=> [record_a, record_b] 

, 네 가지 조건을 가지고,,, record_a 및 record_b 모두 반환되는 결과합니다.

내가 누락 된 항목이 있습니까?

답변

0

난 그냥 내 수학은 내가 처리 할 경우 주어진 잘못 깨달았다 : record_b은 display의 22

이됩니다 display

  • (21)

    • record_a가있을 것이다 무엇 내가해야 할 일은 배열을 변경하는 것입니다 :

      { 
          sphinx_select: with_display, 
          with: {'display' => [12, 21, 22]}, 
      } 
      

      범위 (21) 내에서 끝나는 레코드, 범위 (12) 내에서 시작하는 레코드 및 시작 범위가 인 레코드가 (22)

      범위 내에있는 레코드의 경우를 처리하려면
  • 관련 문제