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_reply는 0이고 원글의 답변글을 눌러서 매년 새로운 기록을 합니다.
예를들어 김철수라는 아이를 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개
</p><p>-- 원하시는 한방쿼리 !!</p><p>SELECT * <span style="font-size: 11pt;">FROM board WHERE wr_id IN (</span></p><p> SELECT MAX(wr_id) FROM board </p><p> WHERE wr_num IN (<span style="font-size: 11pt;">SELECT wr_num FROM board WHERE wr_18='김국한') </span></p><p><span style="font-size: 11pt;"> GROUP BY wr_num</span></p><p>) <span style="font-size: 11pt;">ORDER BY wr_id ASC</span></p><p><span style="font-size: 11pt;">
답변에 대한 댓글 4개
알려주신 쿼리가 3중 쿼리인데, 속에 2중 쿼리까지는 0.0001초가 걸리지만
최 겉면 쿼리를 하면서 17초로 확연히 느려지고 있습니다.
컬럼 수도 줄여봤는데 속도는 비슷하네요.
2중 쿼리 결과가 빠르게 나오는데(보통 결과물 2개정도) 3번째 마지막 쿼리에서 시간이 오래 걸리는 이유가 무얼까요..?
댓글을 작성하려면 로그인이 필요합니다.
김국한이라는 부모밑에 아들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 "
}
}
내용중에 db를 봐야할겠습니다만 wr_parent ??가 원wr_id 참조하는게 맞나 몰겠네요.^^
어쨋든 보통 목록리스트안에 새로운 목록(자식목록)을 보여주려면 새로 for문을 돌리면 가능할것입니다.
정확한 명칭은 틀릴수있으나 전체적인 프로세스는 위방식으로 하는게 맞을것입니다.
참고만 하십시요.^^
댓글을 작성하려면 로그인이 필요합니다.
답변을 3개를 원글에 달게되면 그중에 최근에 달린 답변 한개만 나오도록
하고싶은것같은데
list.php파일에서 수정하기에는 조금 손이 많이갈것같네요
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
(SELECT wr_num FROM board WHERE wr_18='김국한')
에서 이미 원글만 추출되어
최종 결과도 원글로만 나오네요 ㅠㅠ...