나는 매우 기본적인 테이블 하나를 가지고있다.MySQL : 플랫 테이블의 쿼리 결과 정렬
tblFamiles
entryID : Int
name: Text
parentID: Int
다음 행을 추가하십시오.
entryID : name : parentID
1 : Grandmother Jones : 0
2 : Grandmother Thompson : 0
3 : Mother Jones : 1
4 : Mother Thompson : 2
5 : 1st Daughter Jones : 3
6 : 2nd Daughter Jones : 3
7 : 1st Daughter Thompson : 4
가 여기에 우리가 두 개의 familes 세 세대가 저장이, 존스 가족 (AN exampe 등) 톰슨 가족. 나는 그들이 상대적 순서에 있도록하지만, 그냥 평범한 오래된 ORDER BY 'parentID' DESC
같이합니다 (parentID에 의해 결과를이 테이블을 쿼리 만 주문하려는이 같은 출력 싶습니다;. 논리적으로 만
SELECT (SOME MAGIC) FROM `tblFamiles`;
entryID : name : parentID
1 : Grandmother Jones : 0
3 : Mother Jones : 1
5 : 1st Daughter Jones : 3
6 : 2nd Daughter Jones : 3
2 : Grandmother Thompson : 0
4 : Mother Thompson : 2
7 : 1st Daughter Thompson : 4
을 방법은 내가 할 수있는 방법을 볼 수있는 모든 entryIDs 및 다음 각 entryID 루프를 통해 현재 entryID에 대해 자신의 parentID 필드를 확인하고 해당 레코드를 결과 집합의 맨 위에 현재 행 아래에 가져 오는 모든 다른 레코드를 반복하는 것입니다. .하지만 MySQL에서 그렇게하는 방법을 볼 수 없습니다.
UPDATE
나는 위의 예와 같이 가족을 사용했지만, 실제로는 중첩 된 항목을 저장하고 단일 쿼리로 가져와 효율성을 높이는 방법입니다. 나는 단지 복수의 SELECT
쿼리를 만들 수 있지만 그것은 추한 것입니다; 당신은 name
열을 잊을 수
(Pseudo)
SELECT entryID, name WHERE parentID = 0 LIMIT 0,1;
print name;
Sub query:
SELECT entryID, name WHERE parentID = $above-entryID
print name;
(Keep looping through this till the second query returns no results,
then go back to the first query and move onto the next entryID)
2 UPDATE도 예를 들어, 여기에 모든 문제로 두 개의 링크 열 제어가 entryID
및 이들과 같은 parentID
것을 그냥 사용, 존재 모두. name
뿐만 아니라 20 개의 여분의 열이있을 수 있지만 모두 entryID
및 parentID
을 중심으로 회전합니다.이 열은 방금 연결되었거나 중첩 된 ID입니다.
은 왜 단순히 "가족"열을 추가하고 일반 종류를 사용할 수 있습니까? – Mat
두 필드에서 이름 필드를 분리 한 다음 패밀리 이름을 쿼리 할 수 있습니다. – ApplePie
조금 더 설명하기위한 업데이트를 게시하겠습니다. – jwbensley