중첩 세트 모델의 하이브리드를 사용하여 하위가 여러 부모를 가질 수 있도록합니다. Mike Hillyers 블로그에 설명 된 중첩 세트 모델의 확장입니다 : http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ - 일부 열 이름을 설명하는 데 도움이됩니다.다른 쿼리 결과 사용
저는 SQL에 상당히 익숙하지만 조인, 하위 쿼리 등을 조사 했으므로 필요한 결과를 제공하지 못하는 것 같습니다. 대답은 상당히 간단하지만 거의 확실하게 LEFT JOIN
이 될 것이라고 기대합니다. 그러나 그것에 손가락을 대지 못했습니다.
'tree_id', 'part_id', 'lft', 'rgt'및 'mapping'5 개의 열이있는 'nested_parts'라는 간단한 테이블이 있습니다.
다음 쿼리는 두 번째 쿼리에서 비교할 값을 반환합니다.
SELECT * FROM nested_parts WHERE part_id = 125
특히, 이제는 tree_id의 해당 부품 # 125가 있고 각 tree_id의 lft 및 rgt 값을 알고 있습니다.
이제 이전에 가져온 tree_id 결과의 배열에있는 모든 part_id를 알아야합니다.
SELECT * FROM nested_parts
WHERE tree_id = ANY (SELECT tree_id AS tbl FROM nested_parts WHERE part_id = 125)
지금 내가의 각 tree_id의 범위 내에서 부품 번호 (125)의 LFT와 RGT 값 사이에없는 LFT와 RGT 값이 part_id 알아야합니다 :
나는이 이것에 대한 하위 쿼리 사용 . 두 테이블을 비교할 테이블이 있거나 가상 테이블을 사용할 수는 있지만 루프 없이는 불가능합니다.감사의 말을 전한 모든 도움을 받았지만 게으르지 않고 바보가 아니며 내가 유니온, 조인스, 도움, 어디에서 선택 (선택), 위에있는 데이터의 복잡성에 대해서 충분히 읽었지만 이것은 매우 혼란 스럽다.
종류와 관련,
제임스
이봐 제임스, 당신은 설정할 수 있습니다 sqlfiddle @ 조인도 조건을 결합 할 수 있습니다 귀하의 질의 : http://sqlfiddle.com/ –
이 훌륭한 질문입니다 거기에서 끝에 약간 혼란스럽게 말했지만. – Matt
PHP 태그를 제거했는데 PHP에서 구현하고 있지만 기본적으로 mysql 질문입니다. – Matt