채택완료

무식하게 짠 쿼리문좀 봐주세요

Copy
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
            from {$write_table} a
            inner join    (
        select        mb_id,
                    mb_name,
                    mb_level,
                    mb_1,
                    mb_13
                    from    {$g5['member_table']}
                    where    mb_id='{$main_id}'
            union
        select
                    p1.mb_id,
                    p1.mb_name,
                    p1.mb_level,
                    p1.mb_1,
                    p1.mb_13
        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 p6.mb_id = p6.mb_9
        left join   {$g5['member_table']} p8 on p6.mb_id = p7.mb_9
        left join   {$g5['member_table']} p9 on p6.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
        group by mb_id

 

mysql 5라서 재귀쿼리가 안됩니다.

 

mb_9를 기준으로 하위 인원을 뽑아오는데

여기에 depth를 넣고 싶습니다.

 

기준이 되는 mb_id를 0을 기준으로 하위로 1, 2, 3... 이렇게 넣어서 소트를 시키고 싶은데

depth를 어떻게 넣어야 할지 모르겠습니다.

|

답변 2개 / 댓글 6개

채택된 답변
+20 포인트

역시 무식한 답변을 드리자면

if( p2.mb_id is null, 1, if( p3.mb_id is null, 2, if( p4.mb_id is null, 3, ...)))

답변에 대한 댓글 6개

이 구문을 어디에 넣어야 하나요?
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']} p9 on p6.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에 쓰면 left 조인은 의미가 없습니다.
다시 전제 query문을 살펴보니 좀 이상하세요.

https://stackoverflow.com/questions/46462785/hierarchical-get-all-parents-without-using-cte-query
https://stackoverflow.com/questions/20215744/how-to-create-a-mysql-hierarchical-recursive-query

한번 검토해 보세요.
이것저것 쿼리문을 몇가지 해봤는데
위의 쿼리문이 가장 정확해서 사용중입니다.

지금도 여기저기 찾고 있기는 한데..
우선은 depth를 찍고 depth 로 소트 시키라고 해서.....

힘없는 초보개발자는 슬픕니다.
[code]
select
p1.mb_id,
p1.mb_name,
p1.mb_level,
p1.mb_1,
p1.mb_13,
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)))))))) 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 p6.mb_id = p6.mb_9
left join {$g5['member_table']} p8 on p6.mb_id = p7.mb_9
left join {$g5['member_table']} p9 on p6.mb_id = p8.mb_9
where '{$main_name}' 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
[/code]

에러가 나네요
1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')))))))) depth from g5_member p1 left join g5_member p2 on p2.mb_id' at line 18

ㅠㅠ
괄호 갯수가 안 맞는 거 아닐까요?
아니면
.. , if( p9.mb_id is null, 8, 100 )))))))) depth
from {$g5['member_table']} p1 ...
숫자 하나를 더 써 줘야 할 겁니다.
        select
                    p1.mb_id,
                    p1.mb_name,
                    p1.mb_level,
                    p1.mb_1,
                    p1.mb_13,
if( ...) depth  -- 여기에 추가해 보세요.
        from        {$g5['member_table']} p1
        left join   {$g5['member_table']} p2 on p2.mb_id = p1.mb_9

답변을 작성하려면 로그인이 필요합니다.

🐛 버그신고