테스트 사이트 - 개발 중인 베타 버전입니다

무식하게 짠 쿼리문좀 봐주세요 채택완료

예서제이 3년 전 조회 991

</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

            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</p>

<p>

 

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

 

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

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

 

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

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

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

답변 2개

채택된 답변
+20 포인트

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 6개

예서제이
3년 전
이 구문을 어디에 넣어야 하나요?
엑스엠엘
3년 전
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 조인은 의미가 없습니다.
엑스엠엘
3년 전
다시 전제 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

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

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

힘없는 초보개발자는 슬픕니다.
예서제이
3년 전
[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

ㅠㅠ
엑스엠엘
3년 전
괄호 갯수가 안 맞는 거 아닐까요?
아니면
.. , 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
로그인 후 평가할 수 있습니다

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

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

로그인