게시판 목록에서 여러 입력값 중복체크 후 표시해주기? 정보
게시판 목록에서 여러 입력값 중복체크 후 표시해주기?본문
질문드립니다.
게시판 목록에서 입력 중복여부를 표시해주는 것인데,
예를들어
wr_1, wr_2, wr_3 입력값들이 모두 중복인 글(들)을 '중복(중복수)' 로 표시해주려고 하는데
능력부족으로 찾아가며 하는게... 계속 주변만 빙빙돌고 있습니다. ㅠㅠ
도움을 부탁드립니다.
게시판 목록에서 입력 중복여부를 표시해주는 것인데,
예를들어
wr_1, wr_2, wr_3 입력값들이 모두 중복인 글(들)을 '중복(중복수)' 로 표시해주려고 하는데
능력부족으로 찾아가며 하는게... 계속 주변만 빙빙돌고 있습니다. ㅠㅠ
도움을 부탁드립니다.
댓글 전체
select if( wr_1 = wr_2 && wr_2 = wr_3, '중복','중복아님') from ...
이런식으로는 처리 안대나요
이런식으로는 처리 안대나요
답변 감사합니다.
다른 질문에도 답을 해주셨죠? 감사합니다.
이 질문은 제가 설명을 제대로 못드린거 같네요 ㅜㅡ;;
하나의 wr_id에서 중복을 찾는게 아니라 wr_1,wr_2,... 다른 게시물의 각 필드 중복을 체크하는 기능입니다.
3 subject name wr_1 wr_2 wr_3 ...
2 subject name wr_1 wr_2 wr_3 ...
1 subject name wr_1 wr_2 wr_3 ...
으미... 정리를 하면서 보니까 왠지 무지하게 복잡해지는게 아닌가라는 두려움이... ㅡㅡ;;;
하도 반복적으로 삽질(?)에 날밤까기 며칠째인지...
다시 한번 늦은시간까지 수고하시면서 답변달아주셔서 감사합니다.
다른 질문에도 답을 해주셨죠? 감사합니다.
이 질문은 제가 설명을 제대로 못드린거 같네요 ㅜㅡ;;
하나의 wr_id에서 중복을 찾는게 아니라 wr_1,wr_2,... 다른 게시물의 각 필드 중복을 체크하는 기능입니다.
3 subject name wr_1 wr_2 wr_3 ...
2 subject name wr_1 wr_2 wr_3 ...
1 subject name wr_1 wr_2 wr_3 ...
으미... 정리를 하면서 보니까 왠지 무지하게 복잡해지는게 아닌가라는 두려움이... ㅡㅡ;;;
하도 반복적으로 삽질(?)에 날밤까기 며칠째인지...
다시 한번 늦은시간까지 수고하시면서 답변달아주셔서 감사합니다.

순수 sql만 본다면
SELECT wr_1, wr_2, wr_3, COUNT(1) AS cnt FROM $write_table GROUP BY wr_1, wr_2, wr_3 HAVING cnt>1
처럼 하면 wr_1, wr_2, wr_3 값 모두가 중복된 글(댓글) 수를 wr_1, wr_2, wr_3 조합별로 뽑을 수있습니다. :)
SELECT wr_1, wr_2, wr_3, COUNT(1) AS cnt FROM $write_table GROUP BY wr_1, wr_2, wr_3 HAVING cnt>1
처럼 하면 wr_1, wr_2, wr_3 값 모두가 중복된 글(댓글) 수를 wr_1, wr_2, wr_3 조합별로 뽑을 수있습니다. :)
답변 감사합니다.
실제 소스에 적용해 보았습니다.
$row = sql_fetch(" SELECT wr_subject, wr_21, wr_22, COUNT(1) AS cnt FROM $write_table GROUP BY wr_subject, wr_21, wr_22 HAVING cnt>1 ");
if ($row[cnt]) {
$wr22_cmt = "중복($row[cnt])"; // 중복시
} else {
$wr22_cmt = "-"; // 중복아님
}
echo $wr22_cmt ;
목록에서는 $wr22_cmt 부분에 중복된 글들도 - 만 출력이 됩니다.
실제 소스에 적용해 보았습니다.
$row = sql_fetch(" SELECT wr_subject, wr_21, wr_22, COUNT(1) AS cnt FROM $write_table GROUP BY wr_subject, wr_21, wr_22 HAVING cnt>1 ");
if ($row[cnt]) {
$wr22_cmt = "중복($row[cnt])"; // 중복시
} else {
$wr22_cmt = "-"; // 중복아님
}
echo $wr22_cmt ;
목록에서는 $wr22_cmt 부분에 중복된 글들도 - 만 출력이 됩니다.

wr_subject, wr_21, wr_22 모두 중복된 경우가 있나요? ^^;
그리고, 위 sql은 결과가 여러개 나올 수 있습니다. 즉, sql_fetch를 사용하게 되면, 중복되는 wr_subject, wr_21, wr_22 조합의 첫번째 결과만 가져옵니다.
원하시는 기능이, 글목록화면에서, 특정 글이 중복되는 경우에 '중복' 메세지를 출력하시는 것이라면, 위 sql의 결과들을 array로 저장했다가, 특정 글의 wr_subject,wr_21,wr_22값이 중복되는지 array를 검색하도록 하여야 할것 같습니다. :)
또는, 매 글마다
SELECT COUNT(1) AS cnt FROM $write_table WHERE wr_subject= '{$list[$i]['wr_subject'}' AND wr_21 ='{$list[$i]['wr_21'}' AND wr_22 ='{$list[$i]['wr_22'}'
를 수행해서 cnt 값을 체크하는 방법도 있겠네요. :)
그리고, 위 sql은 결과가 여러개 나올 수 있습니다. 즉, sql_fetch를 사용하게 되면, 중복되는 wr_subject, wr_21, wr_22 조합의 첫번째 결과만 가져옵니다.
원하시는 기능이, 글목록화면에서, 특정 글이 중복되는 경우에 '중복' 메세지를 출력하시는 것이라면, 위 sql의 결과들을 array로 저장했다가, 특정 글의 wr_subject,wr_21,wr_22값이 중복되는지 array를 검색하도록 하여야 할것 같습니다. :)
또는, 매 글마다
SELECT COUNT(1) AS cnt FROM $write_table WHERE wr_subject= '{$list[$i]['wr_subject'}' AND wr_21 ='{$list[$i]['wr_21'}' AND wr_22 ='{$list[$i]['wr_22'}'
를 수행해서 cnt 값을 체크하는 방법도 있겠네요. :)
메일로 따로 문의를 드렸고, 전진님께서 답변을 주신 방법으로 해결이 되었습니다.
정말 감사합니다. 또한 K찰스님께도 감사드립니다.
혹 필요하신 분이 계실수 있으니 문의와 답변을 옮겨 놓겠습니다.
[정리후 질문내용]
--- 서론 생략 ----
작업중인 사이트를 알려드립니다.
http://*******.cafe24.com/bbs/board.php?bo_table=G02_1
폐쇄사이트라 관련자만 접근가능한 게시판입니다.
임시로 접근가능하도록 해놨구요, 보시면 이해가 좀더 빠르실것 같아서...
- 고객명 : subject
- 주민등록번호 : wr_9 + wr_10 => wr_22 (검색을 위해 따로 저장)
품목명이 wr_21인데, 정리하다보니 이 항목은 중복체크를 할 필요가 없는데 제가 질문에 포함을 했네요;;;
보시면 이해되시겠지만, 설명을 드리자면...
금은방을 운영하는 회원사들이 각자의 고객들에게 매입한 물품의 장물여부를 확인하기 위한 기능의 게시판입니다.
도둑이 지역을 옮겨가며 장물(매물)을 잡을 경우 제목(고객명)과 주민번호(wr_22)가 중복되는지를 체크해서 표시를 해주면 기관회원(경찰등 수사기관)이 확인할 수 있습니다.
다른 수정은 다 되었는데, 이 게시판 하나만 못풀고 있는 상황이라 더 속이 타네요 ;;; 마무리를 해야 하는데... 못하고 있으니
--- 이하 생략 ---
========================================================================
[전진님 답변내용]
제가 이해하기에 "글 목록페이지에서, 특정 글의 제목과 wr_22 항목이 그 테이블에서 유일한지 아닌지 보여주는 것"을 원하셨다고 생각했습니다.
그래서 제 제안은,
1. 글마다, 게시판내에 subject와 wr_22가 겹치는 다른 글이 있는지 검사하는 것과
$repeated = sql_fetch(" SELECT COUNT(1) AS cnt FROM $write_table WHERE wr_subject= '{$list[$i]['wr_subject'}' AND wr_22 ='{$list[$i]['wr_22'}' ");
$wr22_cmt = ($repeated['cnt']>1) ? "중복({$repeated['cnt']})" : "-";
2. 또는 미리 중복되는 리스트를 만들어 놓고 비교하는 방법을 제안드린 것입니다.
$repeated_array = Array();
$res = sql_query(" SELECT wr_subject, wr_22, COUNT(1) AS cnt FROM $write_table GROUP BY wr_subject, wr_22 HAVING cnt>1 ");
while ($row = sql_fetch_array($res)) {
$key = $row['wr_subject'] . $row['wr_22']; // 검색을 위해서 키를 합침
$repeated_array[$key] = $row['cnt'];
}
...
// $list for 문 안에서
$key = $list[$i]['wr_subject'] . $list[$i]['wr_22'];
$wr22_cmt = isset($repeated[$key]) ? "중복({$repeated[$key]})" : "-";
# # #
두 방법의 차이라면, 첫번째가 매 글마다 디비 검색을 하는 것이고,
두번째는 목록 한페이지당 한번 디비 트랜잭션이 일어나는 차이입니다.
만일 게시판에 등록된 글이 많고 한페이지에서 보여주는 글 수가 많다면, 두번째가 나을것 같네요.
하지만, 그렇게 큰 차이는 없을것 같으니, 간단하게 첫번째 방식으로 하셔도 될것 같습니다.
도움이 되었기를 바라며..
정말 감사합니다. 또한 K찰스님께도 감사드립니다.
혹 필요하신 분이 계실수 있으니 문의와 답변을 옮겨 놓겠습니다.
[정리후 질문내용]
--- 서론 생략 ----
작업중인 사이트를 알려드립니다.
http://*******.cafe24.com/bbs/board.php?bo_table=G02_1
폐쇄사이트라 관련자만 접근가능한 게시판입니다.
임시로 접근가능하도록 해놨구요, 보시면 이해가 좀더 빠르실것 같아서...
- 고객명 : subject
- 주민등록번호 : wr_9 + wr_10 => wr_22 (검색을 위해 따로 저장)
품목명이 wr_21인데, 정리하다보니 이 항목은 중복체크를 할 필요가 없는데 제가 질문에 포함을 했네요;;;
보시면 이해되시겠지만, 설명을 드리자면...
금은방을 운영하는 회원사들이 각자의 고객들에게 매입한 물품의 장물여부를 확인하기 위한 기능의 게시판입니다.
도둑이 지역을 옮겨가며 장물(매물)을 잡을 경우 제목(고객명)과 주민번호(wr_22)가 중복되는지를 체크해서 표시를 해주면 기관회원(경찰등 수사기관)이 확인할 수 있습니다.
다른 수정은 다 되었는데, 이 게시판 하나만 못풀고 있는 상황이라 더 속이 타네요 ;;; 마무리를 해야 하는데... 못하고 있으니
--- 이하 생략 ---
========================================================================
[전진님 답변내용]
제가 이해하기에 "글 목록페이지에서, 특정 글의 제목과 wr_22 항목이 그 테이블에서 유일한지 아닌지 보여주는 것"을 원하셨다고 생각했습니다.
그래서 제 제안은,
1. 글마다, 게시판내에 subject와 wr_22가 겹치는 다른 글이 있는지 검사하는 것과
$repeated = sql_fetch(" SELECT COUNT(1) AS cnt FROM $write_table WHERE wr_subject= '{$list[$i]['wr_subject'}' AND wr_22 ='{$list[$i]['wr_22'}' ");
$wr22_cmt = ($repeated['cnt']>1) ? "중복({$repeated['cnt']})" : "-";
2. 또는 미리 중복되는 리스트를 만들어 놓고 비교하는 방법을 제안드린 것입니다.
$repeated_array = Array();
$res = sql_query(" SELECT wr_subject, wr_22, COUNT(1) AS cnt FROM $write_table GROUP BY wr_subject, wr_22 HAVING cnt>1 ");
while ($row = sql_fetch_array($res)) {
$key = $row['wr_subject'] . $row['wr_22']; // 검색을 위해서 키를 합침
$repeated_array[$key] = $row['cnt'];
}
...
// $list for 문 안에서
$key = $list[$i]['wr_subject'] . $list[$i]['wr_22'];
$wr22_cmt = isset($repeated[$key]) ? "중복({$repeated[$key]})" : "-";
# # #
두 방법의 차이라면, 첫번째가 매 글마다 디비 검색을 하는 것이고,
두번째는 목록 한페이지당 한번 디비 트랜잭션이 일어나는 차이입니다.
만일 게시판에 등록된 글이 많고 한페이지에서 보여주는 글 수가 많다면, 두번째가 나을것 같네요.
하지만, 그렇게 큰 차이는 없을것 같으니, 간단하게 첫번째 방식으로 하셔도 될것 같습니다.
도움이 되었기를 바라며..