쿼리문 질문드립니다.

쿼리문 질문드립니다.

QA

쿼리문 질문드립니다.

본문


    $sum_count = "0";
    $sql = "
        SELECT a.mb_name AS lev1, b.mb_name as lev2, c.mb_name as lev3, d.mb_name as lev4, e.mb_name as lev5, f.mb_name as lev6, g.mb_name as lev7, h.mb_name as lev7, i.mb_name as lev8
        FROM {$g5['member_table']} AS a
        LEFT JOIN {$g5['member_table']} AS b ON b.mb_8 = a.mb_name
        LEFT JOIN {$g5['member_table']} AS c ON c.mb_8 = b.mb_name
        LEFT JOIN {$g5['member_table']} AS d ON d.mb_8 = c.mb_name
        LEFT JOIN {$g5['member_table']} AS e ON e.mb_8 = d.mb_name
        LEFT JOIN {$g5['member_table']} AS f ON f.mb_8 = e.mb_name
        LEFT JOIN {$g5['member_table']} AS g ON g.mb_8 = f.mb_name
        LEFT JOIN {$g5['member_table']} AS h ON h.mb_8 = g.mb_name
        LEFT JOIN {$g5['member_table']} AS i ON i.mb_8 = h.mb_name
        WHERE a.mb_name = '홍길동'
    ";
    $result = sql_query($sql, true);
    while ($row = sql_fetch_array($result)) {
            $row = array_filter($row);
            $sum_count ++;
     echo $sum_count;
     print_r ($row);
     echo "<br>";
    }

1Array ( [lev1] => 홍길동 [lev2] => 고은경1 )
2Array ( [lev1] => 홍길동 [lev2] => 백의현 [lev3] => 김채안 )
3Array ( [lev1] => 홍길동 [lev2] => 김미자 [lev3] => 김옥진 )
4Array ( [lev1] => 홍길동 [lev2] => 김미자 [lev3] => 서국영 [lev4] => 김태숙 )
5Array ( [lev1] => 홍길동 [lev2] => 김미자 [lev3] => 민윤지 [lev4] => 김임두 [lev5] => 양영란 )
6Array ( [lev1] => 홍길동 [lev2] => 김미자 [lev3] => 민윤지 [lev4] => 김평임 )
7Array ( [lev1] => 홍길동 [lev2] => 김미자 [lev3] => 민윤지 [lev4] => 홍정애 )
8Array ( [lev1] => 홍길동 [lev2] => 김미자 [lev3] => 하영홍 )
9Array ( [lev1] => 홍길동 [lev2] => 김미자 [lev3] => 이유라 [lev4] => 김규림2 [lev5] => 사미숙 [lev6] => 문윤희 )
10Array ( [lev1] => 홍길동 [lev2] => 김미자 [lev3] => 이유라 [lev4] => 김규림2 [lev5] => 김시경 )
11Array ( [lev1] => 홍길동 [lev2] => 김미자 [lev3] => 이유라 [lev4] => 김혜숙1 )
12Array ( [lev1] => 홍길동 [lev2] => 김미자 [lev3] => 이유라 [lev4] => 서복순 )
13Array ( [lev1] => 홍길동 [lev2] => 김미자 [lev3] => 이유라 [lev4] => 박정애 )
14Array ( [lev1] => 홍길동 [lev2] => 김미자 [lev3] => 전미희 [lev4] => 조애경 )
15Array ( [lev1] => 홍길동 [lev2] => 김미자 [lev3] => 전미희 [lev4] => 윤기순 )
16Array ( [lev1] => 홍길동 [lev2] => 김미자 [lev3] => 전미희 [lev4] => 조금란 [lev5] => 김진환 )

 

트리구조형은 재귀쿼리가 있다는걸 확인했으나.. 사용가능한 버전이 mysql 8.x부터 가능하더라구요.. 전 5.5를 사용해서 버전 오류가 납니다. ㅠㅠ


해서.. 막코딩으로 하위값까지 가져오는건 했는데 중복값이 제거가 안되네요
(최대 8단계 하위까지 있어서 8단계까지 했고, 빈 값은 제외를 시켰습니다.)

각 이름값이 한번만 나오면 될 거 같은데.. 그게 안됩니다. 
 

이 질문에 댓글 쓰기 :

답변 2

원하시는 것이

4Array ( [lev1] => 홍길동 [lev2] => 김미자 [lev3] => 서국영 [lev4] => 김태숙 )

가 아니라

 

4Array ( [lev4] => 김태숙 )

이런 식을 원하시는 건가요?

SELECT a.mb_name AS lev1, b.mb_name as lev2, c.mb_name as lev3, d.mb_name as lev4, e.mb_name as lev5, f.mb_name as lev6, g.mb_name as lev7, h.mb_name as lev7, i.mb_name as lev8
        FROM {$g5['member_table']} AS a ...

==>

SELECT if( i.mb_name is not null, i.mb_name,
      if( h.mb_name is not null, h.mb_name,
        if( h.mb_name is not null, h.mb_name,
...
      if( b.mb_name is not null, b.mb_name, a.mb_name)
...
        )
      )
  ) m_name
        FROM {$g5['member_table']} AS a ...


	SELECT if( i.mb_name is not null, i.mb_name,
				if( h.mb_name is not null, h.mb_name,
					if( g.mb_name is not null, g.mb_name,
						if( f.mb_name is not null, f.mb_name,
							if( e.mb_name is not null, e.mb_name,
								if( d.mb_name is not null, d.mb_name,
									if( c.mb_name is not null, c.mb_name,
										if( b.mb_name is not null, b.mb_name, a.mb_name)
										)
									)
								)
							)
						)
					)
				) m_name
		FROM {$g5['member_table']} AS a
			LEFT JOIN {$g5['member_table']} AS b ON b.mb_8 = a.mb_name
			LEFT JOIN {$g5['member_table']} AS c ON c.mb_8 = b.mb_name
			LEFT JOIN {$g5['member_table']} AS d ON d.mb_8 = c.mb_name
			LEFT JOIN {$g5['member_table']} AS e ON e.mb_8 = d.mb_name
			LEFT JOIN {$g5['member_table']} AS f ON f.mb_8 = e.mb_name
			LEFT JOIN {$g5['member_table']} AS g ON g.mb_8 = f.mb_name
			LEFT JOIN {$g5['member_table']} AS h ON h.mb_8 = g.mb_name
			LEFT JOIN {$g5['member_table']} AS i ON i.mb_8 = h.mb_name
		WHERE a.mb_name = '홍길동'


말씀하신대로 수정했더니..
가장 마지막 트리값만 나오네요 ㅠㅠ

1Array ( [lev1] => 홍길동 [lev2] => 고은경1 )
2Array ( [lev1] =>  [lev2] => 백의현 [lev3] => 김채안 )
3Array ( [lev1] =>  [lev2] => 김미자 [lev3] => 김옥진 )
4Array ( [lev1] =>  [lev2] => [lev3] => 서국영 [lev4] => 김태숙 )
5Array ( [lev1] =>  [lev2] => [lev3] => 민윤지 [lev4] => 김임두 [lev5] => 양영란 )
6Array ( [lev1] =>  [lev2] => [lev3] => [lev4] => 김평임 )

원하는 값인 위와 같습니다...
각 레벨별로 동일값은 한개만 나오게....

속도는 차치 하고 원하는 결과가 뭔가요?

예시로 주신거에는 중복은 없어 보이는데요 ..

답변을 작성하시기 전에 로그인 해주세요.
전체 167
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT