다중 검색 함수를 구현하고있는데요! 도와주세요 ㅜ.. 정보
다중 검색 함수를 구현하고있는데요! 도와주세요 ㅜ..본문
안녕하세요!
다중검색 기능을 게시판에 구현하려고 하는데요.
제가 만들고 있는건 재물 편람 관리 게시판인데요.
재물에 대한 세부 정보를 게시판 형식으로 자세히 기록하고
그 기록 된 내용을 바탕으로 검색해서 어느 재물이 언제 등록되었고
어디에 비치되어있고 담당자가 누구인지 알 수 있도록 구현하고 있는 중입니다.
근데... 다중 검색 부분에서 참 막히네요.
제가 구현하고자 하는 다중검색 기능은
예를 들어 게시물에 기록 된 항목들 중 '담당자', '재물명', '재물비치장소', '재물사양(내용)' 등의
값을 공란에 입력하여 검색되도록 할려고합니다.
담당자 공란에 '관리자'란 값을 입력하고 재물명에 '컴퓨터'란 값을 입력하고 비치장소엔 '5층'이란 값을 입력하면
담당자가 관리자이고 재물명은 컴퓨터 그리고 비치장소는 5층인 게시물이 딱!
검색되는 그런 기능입니다.
아...근데 너무 어렵네요.
몇일째 머리만 쥐어뜯고있고 ㅎㅎ
제가 수정한 소스는 다음과 같습니다.
gblist.skin.php
<form name=fsearch method=post action='<?="./"?>'>
<input type=hidden name=doc value='<?=$doc?>'>
<input type=hidden name=bo_table value='<?=$bo_table?>'>
<td valign=top align=left width=200>
<table width=200 border=0 cellspacing=0 cellpadding=0 align=left>
<tr>
<td style="padding:5px 10px 0px 10px;">담장자 검색</td>
<td>
<select name=field[0] class=select style="visibility:hidden; width:1px;">
<option value='wr_name' selected>담당자</option>
</select>
<select name=search[0] class=select>
<?=$control_user_option?>
</select>
</td>
</tr>
<tr>
<td>
<select name=soperator class=select style="visibility:hidden">
<option value='0'>OR</option>
<option value='1' selected>AND</option>
</select>
</td>
</tr>
</table>
</td>
<td valign=top align=left width=200>
<table width=200 border=0 cellspacing=0 cellpadding=0 align=left>
<tr>
<td style="padding:5px 10px 0px 10px;">품목 검색</td>
<td>
<select name=field[1] class=select style="visibility:hidden; width:1px;">
<option value='item_cat' selected>품목 분류</option>
</select>
<select name=search[1] class=select>
<?=$item_cat_option?>
</select>
</td>
</tr>
<tr>
<td>
<select name=soperator class=select style="visibility:hidden">
<option value='0'>OR</option>
<option value='1' selected>AND</option>
</select>
</td>
</tr>
</table>
</td>
<td width=500><table width=800><tr><td></td></tr></table></td>
----------------------------------------
gblist.php
for ($j = 0; $j < sizeof($_POST["search"]); $j++) {
if ('' != $search[$j]) {
$sql_search = get_pro_search($field[$j], $search[$j], $soperator);
$sql = " select min(wr_num) from $write_table ";
$row = sql_fetch($sql);
$min_spart = $row[0];
if (!$spart) {
$spart = $min_spart;
}
$sql_search .= " and (wr_num between '".$spart."' and '".($spart+$cfg[search_spart])."') ";
// 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
$sql = " select distinct wr_parent_id from $write_table where (1) $sql_search ";
$result = sql_query($sql);
$total_count = mysql_num_rows($result);
} else {
$sql_search = "";
$total_count = $board[bo_total_count];
}
}
--------------------------------------------------------------
gnuboard.lib.php
function get_pro_search($field, $search, $soperator=0)
{
// 검색필드에 , 가 있다면 ,' ', 로 만든다 concat()
$field = preg_replace("/,/", ",' ',", $field);
$op = "";
$f = sizeof($field);
$s = sizeof($search);
for ($i = 0; $i < $s; $i++) {
if ( ($f > 1) && ($s > 1) ) {
$str = "$field[$i] like '%$search[$i]%'";
if ($field[$i] == $field[1]) {
$str .= "and $field[1] like '%$search[1]%'";
}
if ($field[$i] == $field[2]) {
$str .= "and $field[2] like '%$search[2]%'";
}
if ($field[$i] == $field[3]) {
$str .= "and $field[3] like '%c$search[3]%'";
}
if ($field[$i] == $field[4]) {
$str .= "and $field[4] like '%$search[4]%'";
}
if ($field[$i] == $field[5]) {
$str .= "and $field[5] like '%$search[5]%'";
}
}
}
return $str;
}
---------------------------------------------------------------------
검색 필드와 필드값을 모두 배열화하여 스킨리스트 페이지에서 검색하면
그 값을 그대로 gblist.php에서 받아서 get_pro_search 펑션을 이용해 쿼리문을
작성하여 sql로 넘겨준 뒤 값을 받아오는 방식입니다.
근데... 알고리즘은 대충 구상이 가는데.. 막상 구체화하려니 막막하네요.
고수님들! 다중검색에 대한 구체화에 대한 방법을 제게 전수해주세요!
답변 부탁드립니다~
다중검색 기능을 게시판에 구현하려고 하는데요.
제가 만들고 있는건 재물 편람 관리 게시판인데요.
재물에 대한 세부 정보를 게시판 형식으로 자세히 기록하고
그 기록 된 내용을 바탕으로 검색해서 어느 재물이 언제 등록되었고
어디에 비치되어있고 담당자가 누구인지 알 수 있도록 구현하고 있는 중입니다.
근데... 다중 검색 부분에서 참 막히네요.
제가 구현하고자 하는 다중검색 기능은
예를 들어 게시물에 기록 된 항목들 중 '담당자', '재물명', '재물비치장소', '재물사양(내용)' 등의
값을 공란에 입력하여 검색되도록 할려고합니다.
담당자 공란에 '관리자'란 값을 입력하고 재물명에 '컴퓨터'란 값을 입력하고 비치장소엔 '5층'이란 값을 입력하면
담당자가 관리자이고 재물명은 컴퓨터 그리고 비치장소는 5층인 게시물이 딱!
검색되는 그런 기능입니다.
아...근데 너무 어렵네요.
몇일째 머리만 쥐어뜯고있고 ㅎㅎ
제가 수정한 소스는 다음과 같습니다.
gblist.skin.php
<form name=fsearch method=post action='<?="./"?>'>
<input type=hidden name=doc value='<?=$doc?>'>
<input type=hidden name=bo_table value='<?=$bo_table?>'>
<td valign=top align=left width=200>
<table width=200 border=0 cellspacing=0 cellpadding=0 align=left>
<tr>
<td style="padding:5px 10px 0px 10px;">담장자 검색</td>
<td>
<select name=field[0] class=select style="visibility:hidden; width:1px;">
<option value='wr_name' selected>담당자</option>
</select>
<select name=search[0] class=select>
<?=$control_user_option?>
</select>
</td>
</tr>
<tr>
<td>
<select name=soperator class=select style="visibility:hidden">
<option value='0'>OR</option>
<option value='1' selected>AND</option>
</select>
</td>
</tr>
</table>
</td>
<td valign=top align=left width=200>
<table width=200 border=0 cellspacing=0 cellpadding=0 align=left>
<tr>
<td style="padding:5px 10px 0px 10px;">품목 검색</td>
<td>
<select name=field[1] class=select style="visibility:hidden; width:1px;">
<option value='item_cat' selected>품목 분류</option>
</select>
<select name=search[1] class=select>
<?=$item_cat_option?>
</select>
</td>
</tr>
<tr>
<td>
<select name=soperator class=select style="visibility:hidden">
<option value='0'>OR</option>
<option value='1' selected>AND</option>
</select>
</td>
</tr>
</table>
</td>
<td width=500><table width=800><tr><td></td></tr></table></td>
----------------------------------------
gblist.php
for ($j = 0; $j < sizeof($_POST["search"]); $j++) {
if ('' != $search[$j]) {
$sql_search = get_pro_search($field[$j], $search[$j], $soperator);
$sql = " select min(wr_num) from $write_table ";
$row = sql_fetch($sql);
$min_spart = $row[0];
if (!$spart) {
$spart = $min_spart;
}
$sql_search .= " and (wr_num between '".$spart."' and '".($spart+$cfg[search_spart])."') ";
// 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
$sql = " select distinct wr_parent_id from $write_table where (1) $sql_search ";
$result = sql_query($sql);
$total_count = mysql_num_rows($result);
} else {
$sql_search = "";
$total_count = $board[bo_total_count];
}
}
--------------------------------------------------------------
gnuboard.lib.php
function get_pro_search($field, $search, $soperator=0)
{
// 검색필드에 , 가 있다면 ,' ', 로 만든다 concat()
$field = preg_replace("/,/", ",' ',", $field);
$op = "";
$f = sizeof($field);
$s = sizeof($search);
for ($i = 0; $i < $s; $i++) {
if ( ($f > 1) && ($s > 1) ) {
$str = "$field[$i] like '%$search[$i]%'";
if ($field[$i] == $field[1]) {
$str .= "and $field[1] like '%$search[1]%'";
}
if ($field[$i] == $field[2]) {
$str .= "and $field[2] like '%$search[2]%'";
}
if ($field[$i] == $field[3]) {
$str .= "and $field[3] like '%c$search[3]%'";
}
if ($field[$i] == $field[4]) {
$str .= "and $field[4] like '%$search[4]%'";
}
if ($field[$i] == $field[5]) {
$str .= "and $field[5] like '%$search[5]%'";
}
}
}
return $str;
}
---------------------------------------------------------------------
검색 필드와 필드값을 모두 배열화하여 스킨리스트 페이지에서 검색하면
그 값을 그대로 gblist.php에서 받아서 get_pro_search 펑션을 이용해 쿼리문을
작성하여 sql로 넘겨준 뒤 값을 받아오는 방식입니다.
근데... 알고리즘은 대충 구상이 가는데.. 막상 구체화하려니 막막하네요.
고수님들! 다중검색에 대한 구체화에 대한 방법을 제게 전수해주세요!
답변 부탁드립니다~
댓글 전체
이렇게 복잡할때는 일단 테스트를 해보시고 어떤 에러가 나는지 보고 수정하는 방법이 좋습니다.
그리고 최종으로 $sql_search 값을 화면에 프린트하고 직접 이 쿠어리를 실행 해 보시면 문제점을 찾는데 도움이 될겁니다.
그리고 최종으로 $sql_search 값을 화면에 프린트하고 직접 이 쿠어리를 실행 해 보시면 문제점을 찾는데 도움이 될겁니다.