2011-04-12 4 views
1

레일즈와 MySQL을 사용하는 블로그 앱에 PostsComments이 있다고 가정 해 봅니다.레일에서 모델의 순위를 매기는 가장 좋은 방법은 무엇입니까

게시하고 싶습니다. 의견 개수만큼 게시물을 순위 지정하고 싶습니다. (참고 : 정렬뿐만 아니라 실제 1, 2, 3 순위를 얻습니다.)

또한 주어진 게시물을 통해 모든 게시물을 레일스로로드하고 검색하지 않고도 해당 순위를 얻을 수 있기를 바랍니다.

"이 게시물은 댓글 수에 따라 # 372 등급입니다."

마지막으로, 두 개의 게시물의 댓글 수가 같을 경우 순위가 같아야하므로 넥타이는 괜찮습니다. How do I Handle Ties When Ranking Results in MySQL?

게시물에 추가 필드의 데이터 중 일부를 정상화하여 간단한 해결책이 있는지 궁금 해요 : I는이 게시물로 MySQL이 일부 영리한 솔루션을 보인다했습니다

표.

아무에게도 좋은 접근 방법이 있습니까?

+0

등급을 정의하십시오. 게시물의 카운터 캐시 열에 항상 댓글 개수를 저장하고 최대 댓글을 검색 할 수 있지만 더 자세한 순위 요구 사항이 없으면 다른 것을 생각할 수 없습니다. –

답변

2

이 점에 대해 더 생각해 보면이 기능을 추가하는 방법에는 몇 가지가 있다고 생각합니다.

당신은 혼합 레디 스를 추가하고이 게시물의 최고 점수의 예를 람의 소트 세트의 기능을 사용할 수 있습니다, http://jimneath.org/2011/03/24/using-redis-with-ruby-on-rails.html

이것은 아마 제 생각에 가장 좋은 디자인이 될 것입니다. 데이터 수집 부분에서 분석 부분을 분리하고 가장 좋은 부분을 redis로 사용합니다.

또 다른 방법은 post_id 및 메모 수를 기록하는 PostRanking 모델을 만드는 것입니다. 이 기본 범위를 내림차순으로 주석의 수로 정렬하고 쉽게 쿼리 할 수 ​​있습니다.

0

이 문제는 :counter_cache 연결 옵션에 대해 주어진 예제와 동일합니다.

Take a look.

관련 문제