나는 세 개의 테이블 categories
, tags
및 taggings
을 가지고 있습니다. categories 테이블은 관련 열이 id
, lft
, rgt
및 parent_id
인 중첩 세트 방식으로 결합됩니다. 태그는 id
및 name
입니다. 타칭은 tag_id
및 taggable_id
이며 categories.id
을 나타냅니다.MySQL 쿼리 통합은 테이블과 중첩 세트 모두 조인
가능한 경우 필드에 반환하는 하나의 쿼리 (예 : tag_list
)에 카테고리 및 해당 조상의 태그가 모두 포함 된 문자열을 사용하고 싶습니다. 돌아 I 쿼리 SELECT ??? FROM categories
에 대한 싶습니다
카테고리
id | parent_id | lft | rgt
1 | NULL | 1 | 6
2 | 1 | 2 | 5
3 | 2 | 3 | 4
태그
id | name
1 | cool
2 | rad
3 | soup
Taggings
id | tag_id | taggable_id
1 | 1 | 1
2 | 2 | 2
3 | 3 | 3
: 그래서 다음과 같은 스키마를 제공
id | tag_list
1 | cool
2 | rad cool
3 | rad cool soup
배경 정보 : 나는 Rails를 실행 중이며 검색을 위해 Sphinx를 생각하고 중첩을 위해 awesome_nested_set을 사용하고 있습니다. 나는 categories
이라는 테이블을 가지고 있는데, has_many_through
관계에 많은 tags
이 있습니다. 내가 MySQL을 만 SQLite는에 대해 그것을 확인하지 않았기 때문에 구문이 100 %되지 않을 수 있습니다
감사합니다. 이것은 훌륭하게 작동하지만 SQL-fu가 내 수준보다 충분히 높기 때문에 일단 롤을 그룹화하면 논리를 따라갈 수 없습니다. 중간에있는 괄호로 묶인 쿼리가 카테고리와 조상의 매핑을 만드는 방법을 이해하고, 이것이 카테고리의 상속 된 태그를 결정하는 데 도움이되는 방법을 알 수 있습니다.하지만 나머지가 정확히 어떻게 들어 맞는지 정확히 알 수는 없습니다. 그룹화 단계에서 나를 도울 수있는 친절한 분이라면 감사 할 것입니다. –
내 이전 의견에 대한 후속 조치 ... 신경 쓰지 마! 나는 그것을 지금 이해한다. 빛나는 작품! –
중첩 세트는 새로운 부분이었습니다. 이를 이해하기 위해서는 ID가 약간 혼란 스럽기 때문에 약간 변경해야했습니다. 그래서 tag.id와 tagggings.tag_id를 가져 와서 10을 곱했습니다. 그룹화를 위해 group_concat을 사용했습니다. 기본적으로 모든 그룹 함수 (최대, 합계 등)와 동일하게 작동하며 ID 만 연결합니다. ID가 반복되는 단일 테이블 인 더 단순한 스키마에서 시도해보십시오. – MPelletier