2013-08-03 2 views
0

이미지와 주석 사이에 일대일 관계가 있습니다. 이미지를 반환하고 싶지만 해당 이미지의 최신 5 (주 ID로 정렬) 주석과 함께 반환하고 싶습니다.ActiveRecord는 JOIN 절의 상위 5 개 레코드를 따라 레코드를 반환합니다.

ActiveRecord에서 가능합니까? 어떻게하면 루비가 배열로 그것을 감지/변환 할 수있는 방식으로 5 개의 주석을 구성 할 수 있습니까?

P. 나는 1 개의 질문에서 이것을하고 싶다. 내가 이미지를 쿼리 할 수 ​​있다는 것을 알면 각 이미지에 대해 5 개의 주석을 얻지 만 비효율적입니다. 나는 이것을 한 번에하고 싶다.

단순한 1 대 다수 관계이기 때문에 데이터베이스 스키마를 제공하지 않습니다. comments 테이블에는 image_id라는 열이 있습니다.

감사

+0

기타는이 질문을 이해하는 것처럼 보이지만 설명 할 수 있습니까? "최고 코멘트"란 무엇입니까? 똑같은 댓글 (즉, 동일한 댓글 문자열)이 동일한 이미지에 대해 여러 번 나타날 수 있습니까? "top"은 특정 코멘트의 발생 횟수를 의미합니까? –

+0

@PeterAlfvin 가장 많이 언급 된 의견은 (그들의 1 차 ID별로 정렬 된) 최신 코멘트를 의미합니다. 동일한 댓글은 여러 번 나타날 수 없습니다. 사실, 나는 심지어 최고라고 말한 것을 잊어 버렸다. LIMIT 5와 동일한 효과가 있어야합니다. – 0xSina

답변

0

아니, 당신은 액티브로 묘사하는 일을 할 수있는 방법이 없습니다. 실제로, 자체 조인이 많은 기괴한 쿼리를 작성하기에는 부족합니다. ActiveRecord는 SQL 쿼리를 생성하여 데이터를 검색하므로 SQL과 동일한 제한 사항이 있습니다.

가장 쉬운 방법은 모두 각 이미지에 대한 설명을 검색 한 다음 각 이미지에 대해 5 개를 선택하는 것입니다. 이미지 당 댓글 수가 많아서 검색하는 것이 실적 목표를 달성하지 못할 경우 가능한 다양한 해결책이 있습니다. 더 자세한 내용을 게시하면 누군가는 적절한 해결책이 무엇인지 제안 할 수 있습니다. (예 : 어떤 DB를 사용하고 있습니까? 얼마나 많은 이미지가 있습니까? 평균적으로 이미지 당 얼마나 많은 코멘트가 있습니까? 얼마나 빨리해야합니까?)

+0

MySQL 사용하기. 약 6,000 개의 이미지가 있으며 이미지 당 평균 2 개의 댓글이 있습니다. 내 쿼리가 지금은 140ms에서 실행되며,이 시간이되어야합니다. 내가 redis처럼 메모리 DB에 사용할 것을 제안합니까? – 0xSina

+0

확인. 그것은 매우 쉬운 성능 목표입니다. 아마도 특별한 일을 할 필요가 없을 것입니다. 방금 MySQL 데이터베이스 중 하나에서 12,000 개의 행을 선택했는데 160ms가 걸렸습니다. 가장 간단한 방법으로 MySQL에서 데이터를 검색하는 것만으로도 충분히 빠릅니다. 더 빠른 것을 원하면 몇 가지 옵션이 있습니다. 예, 당신은 레디 스 (Redis)와 같은 것을 실험 할 수 있습니다. 그러나 그것이 필연적으로 훨씬 더 좋을 것이라고 확신하지는 않습니다. 또 다른 옵션은 데이터를 사용하여 빌드 한 모든 것을 취하고 HTML 페이지 *를 캐시하는 것입니다. –

관련 문제