레일에 부모 - 자식 연결이있는 모델이 있으며 특정 자식이 부모에 속한 횟수를 계산하고 싶습니다. 예를 들어 Parent1.children = [A, B, C] 및 Parent2.children = [B, D]이면 각 하위 레코드의 수를 얻고 싶습니다. [A => 1, B => 2, C = > 1, D => 1]. 어떻게 하나의 쿼리를 구성해야합니까?레일에있는 자식 레코드의 빈도
답변
이 당신에게 각 키는 아이의 ID와 각 값 부모의 수입니다 해시를 줄 것이다 :
Children.joins(:parents).group('childrens.id').count
이렇게하면 각 자녀가 초기화 된 어린이의 배열을 줄 것이다 ATTR와 parents_count
그래서 당신은 다음과 해시 (child => parents_count
)를 구축 할 수 있습니다 :
childrens_with_count = Children.joins(:parents).group('childrens.id').select('childrens.*, COUNT(*) AS parents_count')
childrens_with_count.map { |child| { child => child.parents_count } }
#=> [#<Child id=1 ...> => 2, #<Child id=2...> => 10 ... ]
내부 조인이 여기에 적합하지 않습니다. 부모가없는 아이들은 결과물에서 사라집니다. – DNNX
@DNNX 당신 말이 맞아요. 나는 부모가없는 아이가 아이가 아니라고 생각했다. – akhanubis
parent : [[A, B, C], [B, D]]로 그룹화 된 다차원 배열이있는 경우 어떻게 하나부터 진행할 수 있습니까? – graphmeter
이 간단한 방법이지만, SQL 쿼리의 관점에서 가장 효율적인하지 않을 수 있습니다 :
는child_counts = Parent.each_with_object(Hash.new(0)) { |p, counts| p.children.each { |c| counts[c.id] += 1 } }
child_counts
결과 해시, 자식 ID 당 수를 (자식 ID가 해시 키입니다) 제공합니다.
감사합니다, 작동하는 것 같습니다 .is t 여기에이 쿼리를 수행하는보다 효율적인 방법이 있습니까? – graphmeter
예, 있습니다. 다른 대답을 참조하십시오. – DNNX
@ 그래프 미터 체크 파블로 B의 대답. 더 "SQL concious" – lurker
- 1. 활성 레코드의 빈도 순 주문
- 2. 레일에있는 다른 모델에 속한 레코드의 카운트 값
- 3. 미사용 레일에있는 모든 레코드의 필드를 축소합니다.
- 4. 부모 테이블에서 레일에있는 자식 테이블에 액세스
- 5. 마지막 자식 레코드의 공통 테이블 표현
- 6. 자식 레코드의 시퀀스 번호가 1에서 시작하는지 확인하십시오.
- 7. 다른 레코드의 SQL - 부모 - 자식 관계
- 8. Oracle에서 커밋 할 빈도
- 9. 상위 레코드의 critera에 기반한 하위 레코드의 색인?
- 10. 빈도 표 아래 빈도 표
- 11. ARP 테이블 새로 고침 빈도, 빈도 및 빈도
- 12. 단어 빈도 및 문서 단어 빈도
- 13. 가져 오기 부모 자식 레코드의 SQL 서버 2008
- 14. MySQL의 모든 자식 레코드의 상태 변경 부모의 상태가
- 15. getJSON에서 반환 된 열거 가능한 자식 레코드의 속성에 액세스
- 16. 자식 레코드의 LinqDataSource/ListView - 포함 레코드가 저장된 경우에만 저장 하시겠습니까?
- 17. 레일이 부모 업데이트에서 실행되지 않는 자식 레코드의 콜백을 삭제합니다.
- 18. 배열의 빈도
- 19. 삽입 빈도
- 20. 변수의 빈도
- 21. 레일에있는 세션에 객체 저장
- 22. 레일에있는 서브 테이블의 조건
- 23. 레일에있는 주석을위한 다형성 테이블
- 24. 레일에있는 시퀀스 번호
- 25. 레일에있는 URL을 방문하려면 어떻게해야합니까?
- 26. 레일에있는 다형성 연관
- 27. 레일에있는 모델의보기 도우미에 액세스
- 28. 레일에있는 루비에있는 진술 문
- 29. 레일에있는 문자열의 특이점을 확인하십시오
- 30. 레일에있는 다형성 연관
먼저 다음, 배열의 모든 아이를 넣어'루비 each_with_object' 방법을 사용,'Hash.new을 가진 (0)' 내부 해시로서 ... –