mysql 쿼리 질문드립니다. 0 2 854

by 킹초보 [SQL Query] [2021.01.11 22:50:09]


             
  reg.tbl          
  mb_no mb_name mb_level mb_recommend mb_point  
  1 AAA01 3   200  
  2 AAA02 3 AAA01 190  
  3 AAA03 2 AAA01 180  
  4 AAA04 2 AAA02 170  
  5 AAA05 1 AAA03 160  
  6 AAA06 1 AAA04 150  
  7 AAA07 1 AAA05 140  
  8 AAA08 1 AAA02 130  
  9 AAA09 2 AAA02 120  
             
  [reg.php 화면 출력]        
             
  1단계 2단계 3단계 포인트  
  AAA01       200  
  AAA02     190  
    AAA04   170  
      AAA06 150  
    AAA08   130  
    AAA09   120  
  AAA03     180  
    AAA05   160  
      AAA07 140  
             

 

추천인을 출력하는 페이지 인데요..

보통 그전에는...for 문을 돌리고 돌려서 '나' 를 기준으로 순서대로(가로형) 출력해서 보여줬는데요...

위처럼 세로타입(?) 으로 표현하려고 하니...구문을 어떻게 짜야 할지 난해 해서요.

워낙 실력이 부족해서...끙끙거리고 있습니다. 도움 주실분 계신가요..ㅜㅜ

 

by 마농 [2021.01.12 09:42:01]
WITH RECURSIVE t1 AS
(
SELECT mb_no, mb_name, mb_level, mb_recommend, mb_point
     , 0 lv
     , CAST(mb_name AS VARCHAR(200)) AS mb_name_list
  FROM t
 WHERE mb_recommend IS NULL
 UNION ALL
SELECT c.mb_no, c.mb_name, c.mb_level, c.mb_recommend, c.mb_point
     , p.lv + 1 lv
     , CONCAT(p.mb_name_list, '-', c.mb_name) AS mb_name_list
  FROM t1 p
 INNER JOIN t c
    ON p.mb_name = c.mb_recommend
)
SELECT CASE lv WHEN 0 THEN mb_name WHEN 1 THEN 'ㄴ' END lv0
     , CASE lv WHEN 1 THEN mb_name WHEN 2 THEN 'ㄴ' END lv1
     , CASE lv WHEN 2 THEN mb_name WHEN 3 THEN 'ㄴ' END lv2
     , CASE lv WHEN 3 THEN mb_name WHEN 4 THEN 'ㄴ' END lv3
     , mb_point
  FROM t1
 ORDER BY mb_name_list
;

 


by 킹초보 [2021.01.12 10:51:54]

답변 정말 감사드립니다. 한번 적용해 보겠습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입