2012-05-23 4 views
2

MySQL 중첩 세트에서 다중 경로를 검색 할 수 있습니까? 강조는 where 조건의 두 번째 줄에 있습니다.중첩 세트 : 다중 경로 검색

SELECT parent.name 
FROM nested_category AS node, 
    nested_category AS parent 
WHERE node.lft BETWEEN parent.lft AND parent.rgt 
    AND node.name = 'Name1' OR node.name = 'Name2' 
ORDER BY node.lft; 
+0

그냥 노드 이름에 괄호를 추가'(node.name = '이름 1'OR node.name = 'NAME2'

이 내용은 내 블로그의 항목을 참조하십시오)' – Nico

답변

2

예, 물론입니다.

SQL에서 ORAND보다 낮은 우선 순위를 가지고, 그래서 당신은 쿼리 재 작성해야합니다 조건이 스 SARGable하지 조인 때문에 MySQL에서이 쿼리는 매우 비효율적이다

SELECT parent.name 
FROM nested_category AS node 
JOIN nested_category AS parent 
ON  node.lft BETWEEN parent.lft AND parent.rgt 
WHERE node.name IN ('Name1', 'Name2') 
ORDER BY 
     node.lft; 

합니다.

집합을 LineString으로 저장하고 공간 인덱스를 사용하여 쿼리의 속도를 높이는 것이 좋습니다.

+0

고마워요. –