(코드가 너무 길어서 질문이 잘렸던 것 같습니다... ㅠㅠ 질문 다시 올립니다.)
질문 내용은 아래와 같습니다.
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개 / 댓글 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
답변에 대한 댓글 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 "<div >$row[wr_subject]</div>";
}
}
내용중에 db를 봐야할겠습니다만 wr_parent ??가 원wr_id 참조하는게 맞나 몰겠네요.^^
어쨋든 보통 목록리스트안에 새로운 목록(자식목록)을 보여주려면 새로 for문을 돌리면 가능할것입니다.
정확한 명칭은 틀릴수있으나 전체적인 프로세스는 위방식으로 하는게 맞을것입니다.
참고만 하십시요.^^
답변을 3개를 원글에 달게되면 그중에 최근에 달린 답변 한개만 나오도록
하고싶은것같은데
list.php파일에서 수정하기에는 조금 손이 많이갈것같네요
요청주신 사항이 조금 난해 합니다. wr_18 최신 row에 포함되어 있지 않다는 말씀이 무엇인지 모르겠네요
해당 쿼리 진행시 select *,(별도쿼리) as 1,(별도쿼리) as 2 from 테이블명 where 문으로 해서 가져오는 방법도 있고 그리고 두자녀인 경우는 어떤식으로 되어 있는지 확인이 되지 않아 정확한 부분을 답변드리기는 현재 난해한 부분이 있네요
답변을 작성하려면 로그인이 필요합니다.
(SELECT wr_num FROM board WHERE wr_18='김국한')
에서 이미 원글만 추출되어
최종 결과도 원글로만 나오네요 ㅠㅠ...