다중 게시판 검색

미랑 · 2004-03-25 03:14:46

우선 각 게시판에서 조회수를 기준으로 열개를 뽑아옵니다
$table_array = array("A","B","C");
for($i=0;$i<count($table_array);$i++){
$result=mysql_query("SELECT uid,ref FROM $table_array[$i] ORDER BY ref DESC LIMIT 10");
$row=mysql_fetch_array($result);
$uid=$row[uid] . "|" . $table_array[$i];
$ref_uid[$uid]=$row[ref];
}

arsort($ref_uid);
$ref_uid = array_keys($ref_uid);

for($j=0;$j<count($ref_uid); $j++){
$record = explode("|", $ref_uid[$j]);
$uid = $record[0];
$table = $record[1];
$query = "SELECT * FROM $table where uid='$uid'";
원하는 데이터 출력...
}
예전에 제가 팁텍에 올렸던 팁인데, union으로 쿼리 한방에 된다고 하여 삭제했었던 팁입니다.


==========================================================================================================
TEMPORARY 테이블을 이용한 다중 검색에 대해서 적어 볼까 합니다

다른 디비에는 UNION 이라는 것이 있어서 다중검색이 된다더군요

(UNION 이 머래요? 0_0;;;)

전 MYSQL 밖에 몰라서 이걸루 해볼라구 설쳐서 .. 성공 했습니다

먼저 MYSQL 3.23.29a 의 환경에서 실행하였습니다

아래는 소스 입니다

의문 나는 사항이 있으시면 제 홈쥐에 글 남겨 주시거나 메일 주십시요

꾸벅


// TEMPORARY TABLE MAKE
$tmp_make=mysql_query("create temporary table tmp (
        sid int NOT NULL DEFAULT '0' auto_increment,
        board varchar(20) NOT NULL,
        bid int(11) NOT NULL,
        subject varchar(255) NOT NULL,
        content text,
        signdate int(10) NOT NULL,
        PRIMARY KEY(sid)
        )");
// 게시판 환경 설정 테이블에서 각 게시판 BOARD 가져오기
$total_result =mysql_query("select board from board_config where limit_user_level < $admin_level");
$board_total = mysql_num_rows($total_result);


// BOARD 별로 게시판 돌면서 검색한다
for($i=0;$i<$board_total;$i++) {
    mysql_data_seek($total_result,$i);
    $board = mysql_fetch_array($total_result);
    $search=mysql_query("select bid,subject,content,signdate from $board[board] where name like '%$key%' or subject like '%$key%' or content like '%$key%'");
    $search_total=mysql_num_rows($search);
    
    // 검색 결과를 TEMPORARY 테이블에 집어 넣는다
    for($j=0;$j<$search_total;$j++) {
        mysql_data_seek($search,$j);
        $row = mysql_fetch_array($search);
        $insert=mysql_query("insert into tmp
                (board,bid,subject,content,signdate)
                values
                ('$board[board]','$row[bid]','$row[subject]','$row[content]','$row[subject]')
                ");                
        }
}

// TEMPORARY 테이블 정보 가져오기
$result=mysql_query("select * from tmp order by signdate");
$total=mysql_num_rows($result);

echo "
<center>
<table border='0' cellpadding='2' cellspacing='2' width='90%'>
<tr>
    <td colspan='10' align='right'>
        검 색 어 <font color='red'><b>$key</b></font> 로 <font color='red'><b>$total</b></font> 개의 게시물이 검색 되었습니다
    </td>
</tr>
";
// 보여주기
for($k=0;$k<$total;$k++) {
    mysql_data_seek($result,$k);
    $board=mysql_fetch_array($result);
    $board[subject]=stripslashes($board[subject]);
    $board[content]=stripslashes($board[content]);
    $board[content]= htmlspecialchars($board[content]);
    $board[signdate]=date("Y/m/d",$board[signdate]);
    $board[content] = shortenStr($board[content],200,"<br>more.....");
    $board[subject] = shortenStr($board[subject],60,".....");        
    $board[subject] = eregi_replace("($key)","<font color='red'>\1</font>",$board[subject]);
    $board[content] = eregi_replace("($key)","<font color='red'>\1</font>",$board[content]);
    echo "
        <tr bgcolor='#006699'>
            <td height='25'>
                <font color='white'><b>$board[subject]</b> ------- $board[signdate]</font>
            </td>
        </tr>
        <tr>
            <td height='40'>
                <a href='./cyboard/board.php3?board=$board[board]&bid=$board[bid]&mode=reade&key=$key'>$board[content]</a>
            </td>
        </tr>
    ";
    
}
$drop=mysql_query("drop table tmp");