쿼리문 depth 좀 봐주세요 채택완료
예서제이
3년 전
조회 1,063
</p>
<p> select a.mb_id, a.wr_name, b.mb_name, a.wr_29, b.mb_level, b.mb_1, count(*) as cnt , sum(a.wr_23) as tot, depth
from {$write_table} a
inner join (
select mb_id,
mb_name,
mb_level,
if( mb_id is null, 0, 0) depth
from {$g5['member_table']}
where mb_id='{$main_id}'
union</p>
<p> select
p1.mb_id,
p1.mb_name,
p1.mb_level,
if( p2.mb_id is null, 1, if( p3.mb_id is null, 2, if( p4.mb_id is null, 3, if( p5.mb_id is null, 4, if( p6.mb_id is null, 5, if( p7.mb_id is null, 6, if( p8.mb_id is null, 7, if( p9.mb_id is null, 8, 9)))))))) depth
from {$g5['member_table']} p1
left join {$g5['member_table']} p2 on p2.mb_id = p1.mb_9
left join {$g5['member_table']} p3 on p3.mb_id = p2.mb_9
left join {$g5['member_table']} p4 on p4.mb_id = p3.mb_9
left join {$g5['member_table']} p5 on p5.mb_id = p4.mb_9
left join {$g5['member_table']} p6 on p6.mb_id = p5.mb_9
left join {$g5['member_table']} p7 on p7.mb_id = p6.mb_9
left join {$g5['member_table']} p8 on p8.mb_id = p7.mb_9
left join {$g5['member_table']} p9 on p9.mb_id = p8.mb_9
where '{$main_id}' in (p1.mb_9, p2.mb_9, p3.mb_9, p4.mb_9, p5.mb_9, p6.mb_9, p7.mb_9, p8.mb_9, p9.mb_9)
) as b on a.mb_id = b.mb_id
where wr_29 between '{$stx1}' and '{$stx2}'
group by mb_id
order by depth</p>
<p>
도움을 받아서 depth까지는 나옵니다.
문제는 $main_id를 기준으로 1,2,3 이렇게 나오는게 아니라
무조건 최상위부터 depth 가 나옵니다.
예를들어
owner 아이디로 했을때
"aaaa"가 2뎁스,
"bbbb"가 3뎁스 이고..
그 하위 "cccc" 가 4뎁스인데
$main_id 를 bbbb 로 뿌렸을때도 "cccc"의 depth 가 4뎁스로 표기가 됩니다.
무조건 최상위 owner가 기준이 되고 있습니다.
$main_id 를 기준으로 depth 를 1,2,3 이렇게 표시할려면 어떻게 수정해야 하나요?
댓글을 작성하려면 로그인이 필요합니다.
답변 1개
채택된 답변
+20 포인트
답변에 대한 댓글 2개
�
예서제이
3년 전
�
엑스엠엘
3년 전
상위 하위 따로는
select ... where 'test' in (p1.mb_9)
union
select ... where 'test' in (p9.mb_9)
이렇게 되는 것을 생각했는데, 이건 안 되네요.
select 1 depth, ... from ( select ... where 'test' in (p1.mb_9) ) A1
union
select 2 depth, ... from ( select ... where 'test' in (p2.mb_9) ) A2
union
select 3 depth, ... from ( select ... where 'test' in (p3.mb_9) ) A3
...
이렇게 되어야겠네요.
하지만 너무 복잡해지므로
DB를 바꾸시는 것이 가장 좋을 듯합니다.
select ... where 'test' in (p1.mb_9)
union
select ... where 'test' in (p9.mb_9)
이렇게 되는 것을 생각했는데, 이건 안 되네요.
select 1 depth, ... from ( select ... where 'test' in (p1.mb_9) ) A1
union
select 2 depth, ... from ( select ... where 'test' in (p2.mb_9) ) A2
union
select 3 depth, ... from ( select ... where 'test' in (p3.mb_9) ) A3
...
이렇게 되어야겠네요.
하지만 너무 복잡해지므로
DB를 바꾸시는 것이 가장 좋을 듯합니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
select
p1.mb_id as mb_id,
p1.mb_name,
if( p2.mb_id is null, 1,
if( p3.mb_id is null, 2,
if( p4.mb_id is null, 3,
if( p5.mb_id is null, 4,
if( p6.mb_id is null, 5,
if( p7.mb_id is null, 6,
if( p8.mb_id is null, 7,
if( p9.mb_id is null, 8, 9)))))))) depth
from {$g5['member_table']} p1
left join {$g5['member_table']} p2 on p2.mb_id = p1.mb_9
left join {$g5['member_table']} p3 on p3.mb_id = p2.mb_9
left join {$g5['member_table']} p4 on p4.mb_id = p3.mb_9
left join {$g5['member_table']} p5 on p5.mb_id = p4.mb_9
left join {$g5['member_table']} p6 on p6.mb_id = p5.mb_9
left join {$g5['member_table']} p7 on p7.mb_id = p6.mb_9
left join {$g5['member_table']} p8 on p8.mb_id = p7.mb_9
left join {$g5['member_table']} p9 on p9.mb_id = p8.mb_9
where 'test' in (p1.mb_9,
p2.mb_9,
p3.mb_9,
p4.mb_9,
p5.mb_9,
p6.mb_9,
p7.mb_9,
p8.mb_9,
p9.mb_9)
order by depth, mb_name;
[/code]
하위만 따로 select 했는데도.. depth 가 1이 나오질 않습니다.
어떻게 해도.. 최 상위로부터 depth가 나오고 있습니다.
test라는 아이디가 최 상위로부터 3인데..
리스트로 뿌려지는 하위 값은 4부터 시작되고 있습니다.