Copy
$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>";
}
Copy
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개 / 댓글 12개
채택된 답변
+20 포인트
원하시는 것이
4Array ( [lev1] => 홍길동 [lev2] => 김미자 [lev3] => 서국영 [lev4] => 김태숙 )
가 아니라
4Array ( [lev4] => 김태숙 )
이런 식을 원하시는 건가요?
답변에 대한 댓글 9개
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 ...
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 ...
[code]
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 = '홍길동'
[/code]
말씀하신대로 수정했더니..
가장 마지막 트리값만 나오네요 ㅠㅠ
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 = '홍길동'
[/code]
말씀하신대로 수정했더니..
가장 마지막 트리값만 나오네요 ㅠㅠ
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] => 김평임 )
원하는 값인 위와 같습니다...
각 레벨별로 동일값은 한개만 나오게....
2Array ( [lev1] => [lev2] => 백의현 [lev3] => 김채안 )
3Array ( [lev1] => [lev2] => 김미자 [lev3] => 김옥진 )
4Array ( [lev1] => [lev2] => [lev3] => 서국영 [lev4] => 김태숙 )
5Array ( [lev1] => [lev2] => [lev3] => 민윤지 [lev4] => 김임두 [lev5] => 양영란 )
6Array ( [lev1] => [lev2] => [lev3] => [lev4] => 김평임 )
원하는 값인 위와 같습니다...
각 레벨별로 동일값은 한개만 나오게....
속도는 차치 하고 원하는 결과가 뭔가요?
예시로 주신거에는 중복은 없어 보이는데요 ..
답변에 대한 댓글 3개
답변을 작성하려면 로그인이 필요합니다.
상위레벨은 1번만 나오면 됩니다.
엑스엠엘님께서 알려주신 CTE가 안되서 무한루프를 돌렸더니..
원하는 값은 대충 나왔는데 중복값이 나와서 또 막히네요..