쿼리문 질문드립니다. 채택완료
밀랍
3년 전
조회 1,843
</p>
<p> $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);</p>
<p> while ($row = sql_fetch_array($result)) {
$row = array_filter($row);
$sum_count ++;</p>
<p> echo $sum_count;
print_r ($row);
echo "
";</p>
<p> }</p>
<p>
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개
채택된 답변
+20 포인트
3년 전
원하시는 것이
4Array ( [lev1] => 홍길동 [lev2] => 김미자 [lev3] => 서국영 [lev4] => 김태숙 )
가 아니라
4Array ( [lev4] => 김태숙 )
이런 식을 원하시는 건가요?
로그인 후 평가할 수 있습니다
답변에 대한 댓글 9개
�
밀랍
3년 전
�
엑스엠엘
3년 전
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 ...
�
밀랍
3년 전
[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]
말씀하신대로 수정했더니..
가장 마지막 트리값만 나오네요 ㅠㅠ
�
밀랍
3년 전
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년 전
이건 loop 돌면서 처리해야 할 문제 같습니다.
�
밀랍
3년 전
루프 힌트만이라도 주시면 여기저기 검색 및 수정해 보겠습니다....
�
엑스엠엘
3년 전
각 array
끝에서 첫째, 둘째만 가져 오면 되는 거 같네요.
$len= count( $array1);
echo $array[ $len-2],' == ', $array1[ $len-1];
끝에서 첫째, 둘째만 가져 오면 되는 거 같네요.
$len= count( $array1);
echo $array[ $len-2],' == ', $array1[ $len-1];
�
밀랍
3년 전
기초적인 질문 드려서 죄송합니다.
$array1 값은 어디서 가져오나요?
모든 값이 array로 표시되어 있고...
앞의 숫자는 제가 카운트하기 위해 $sum_count를 뿌려둔건데... ㅠㅠ
$array1 값은 어디서 가져오나요?
모든 값이 array로 표시되어 있고...
앞의 숫자는 제가 카운트하기 위해 $sum_count를 뿌려둔건데... ㅠㅠ
�
엑스엠엘
3년 전
print_r ($row);
이거겠죠, 아마도...
이거겠죠, 아마도...
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 3개
�
밀랍
3년 전
각 레벨별로 이름이 한번만 나왔으면 합니다.
�
백수1995
3년 전
그럴거면 각 레벨별로 쿼리 한번씩 총 8번하거나
쿼리 8개를 union 하는게 어떤가요?
쿼리 8개를 union 하는게 어떤가요?
�
밀랍
3년 전
실력이 부족해서.. 말씀하신 쿼리를 8번한다던가
쿼리 8개를 UNION 하라는 말을 잘 모르겠습니다.
힌트나.. 어떻게 하라는 방법을 알려주시면 감사하겠습니다.
쿼리 8개를 UNION 하라는 말을 잘 모르겠습니다.
힌트나.. 어떻게 하라는 방법을 알려주시면 감사하겠습니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
상위레벨은 1번만 나오면 됩니다.
엑스엠엘님께서 알려주신 CTE가 안되서 무한루프를 돌렸더니..
원하는 값은 대충 나왔는데 중복값이 나와서 또 막히네요..