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

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

QA

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

본문


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

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

if( p2.mb_id is null, 1, if( p3.mb_id is null, 2, if( p4.mb_id is null, 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 조인은 의미가 없습니다.

이것저것 쿼리문을 몇가지 해봤는데
위의 쿼리문이 가장 정확해서 사용중입니다.

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

힘없는 초보개발자는 슬픕니다.


		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


에러가 나네요
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

ㅠㅠ

        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
답변을 작성하시기 전에 로그인 해주세요.
전체 59,595
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT