sql 질문드립니다.!

sql 질문드립니다.!

QA

sql 질문드립니다.!

본문

(코드가 너무 길어서 질문이 잘렸던 것 같습니다... ㅠㅠ 질문 다시 올립니다.)
질문 내용은 아래와 같습니다.

 

wr_id    |

wr_num   |

wr_reply   |

wr_subject |

wr_18(id)

 

 

 

 

59       |

-1         |

0          |

김철수19  |

김국환

 

 

 

 

60      |

-1        |

1         |

김철수20 |

 

 

 

 

 

 

61      |

-2        |

0         |

김민희15 |

김국환

 

 

 

 

62      |

-2        |

1         |

김민희16 |

 

 

 

 

 

 

63      |

-2        |

2         |

김민의17 |

 

 

 

 

 

 

64      |

-3        |

0         |

정민한8  |

정지국

 

 

 

 

65      |

-3        |

1         |

정민한9  |

 

 

 

 

 

 

66      |

            |

 

          |

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

특정 아동(자기 자식)을 매년 새로 기록하는 게시판이 있습니다.원글(맨 처음 쓴 글)wr_reply0이고 원글의 답변글을 눌러서 매년 새로운 기록을 합니다.

예를들어 김철수라는 아이를 19세부터 기록했다고 하면 원글은

59      |

-1      | 

0         |

김철수19 |

김국환

 

 

 

 

이고, 1년 후에 원글에 답변을 눌러서 작성하면, 

60      |

-1       |

1         |

김철수20 |

 

 

 

 

와 같습니다.(wr_subject는 자유롭게 작성)

 

이제 아버지 입장(김국환)에서 해당 게시판의 리스트를 확인 했을  경우 자식들의 가장 최신 기록만 나오게 하고 싶습니다. 즉,

 

60      |

-1        |

1         |

김철수20 |

 

 

 

 

 

 

63      |

-2        |

2         |

김민의17 |

 

 

 

 

 

이렇게 자기 자식의 최신 기록을 노출 시키고 싶습니다.

그런데 문제는 고유값인 wr_18는 최신 row에 포함되어 있지 않습니다.

자식이 하나라면 서브 쿼리를 통해 최신글 하나를 불러오는 것이 가능하지만 두 자녀 이상부터는 쉽지가 않네요.
서브 쿼리의 결과가 1개 여야 하기 때문입니다.(☜제 실력으로는 이렇게 생각하고 있습니다.)
쿼리 한방으로 위와 같은 결과를 가져오려면 어떻게 해야 할까요?

 

이 질문에 댓글 쓰기 :

답변 4


-- 원하시는 한방쿼리 !!
SELECT * FROM board WHERE wr_id IN (
    SELECT MAX(wr_id) FROM board 
    WHERE wr_num IN (SELECT wr_num FROM board WHERE wr_18='김국한') 
    GROUP BY wr_num
) ORDER BY wr_id ASC
 

하나만 더 여쭤봐도 될까요?
알려주신 쿼리가 3중 쿼리인데, 속에 2중 쿼리까지는 0.0001초가 걸리지만
최 겉면 쿼리를 하면서 17초로 확연히 느려지고 있습니다.
컬럼 수도 줄여봤는데 속도는 비슷하네요.
2중 쿼리 결과가 빠르게 나오는데(보통 결과물 2개정도) 3번째 마지막 쿼리에서 시간이 오래 걸리는 이유가 무얼까요..?

요청주신 사항이 조금 난해 합니다. wr_18 최신 row에 포함되어 있지 않다는 말씀이 무엇인지 모르겠네요

해당 쿼리 진행시 select *,(별도쿼리) as 1,(별도쿼리) as 2 from 테이블명 where 문으로 해서 가져오는 방법도 있고 그리고 두자녀인 경우는 어떤식으로 되어 있는지 확인이 되지 않아 정확한 부분을 답변드리기는 현재 난해한 부분이 있네요

답변을 3개를 원글에 달게되면 그중에 최근에 달린 답변 한개만 나오도록

하고싶은것같은데

list.php파일에서 수정하기에는 조금 손이 많이갈것같네요

김국한이라는 부모밑에 아들1/딸1 에대해서 지속적인 자료를 올려서 그 회원내의 목록만 볼수있도록 하고싶은것같군요.

 

1. list.skin.php 에서 1대1문의글을 참고해서 회원만 볼수있도록 처리를 하십시요.

  이건 스킨자료실을 찾으시면 /bbs/list.php를 변경하는 방법과  list.skin.php상단에 $sql문을 다시 실행해서

  회원전용게시물을 가져오는 방식등 몇가지가 있으니 참고하셔서 이용하시면 어떨까 싶습니다.

 

2. list목록에서 새로운 sql문을 하나 작성해서 노출시키는게 어떨까 싶습니다.

for(*****){

    $sql =" select * from g5_write_{$bo_table} where wr_parent='{$list[$i][wr_id]}' and wr_is_comment='1' order by wr_datetime desc  ";

   for($i=0;$row=sql_fetch_array($result);$i++){

    echo "<div >$row[wr_subject]</div>";

 

  }

}

내용중에 db를 봐야할겠습니다만 wr_parent ??가 원wr_id 참조하는게 맞나 몰겠네요.^^

어쨋든 보통 목록리스트안에 새로운 목록(자식목록)을 보여주려면  새로 for문을 돌리면 가능할것입니다.

정확한 명칭은 틀릴수있으나 전체적인  프로세스는 위방식으로 하는게 맞을것입니다.

참고만 하십시요.^^

 

답변을 작성하시기 전에 로그인 해주세요.
전체 29
QA 내용 검색

회원로그인

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