반응형
게시판의 내용 검색시 HTML 태그가 같이 검색되어,
사용자가 원하는 값을 정확하게 찾지 못하는 것을 방지 하기위해 아래와 같이 MySQL 사용자 함수를 등록해주고,
CREATE FUNCTION `strip_tags`(s TEXT) RETURNS text CHARSET utf8
NO SQL
BEGIN
DECLARE start,end INT DEFAULT 1;
LOOP
SET start = LOCATE("<", s, start);
IF (!start) THEN RETURN s; END IF;
SET end = LOCATE(">", s, start);
IF (!end) THEN SET end = start; END IF;
SET s = INSERT(s, start, end - start + 1, "");
END LOOP;
END
검색 시 아래와 같이 등록한 MySQL 함수를 이용한다.
SELECT * FROM board WHERE strip_tags(col_content) like '%검색어%'
아래 PHP 코드처럼 응용하면 좀더 자연스러운 검색이 되지 않을까 한다.
단, 단어와 정확하게 일치 하는 검색 결과를 원한다면 아래의 코드는 지양하는게 좋다.
<?php
$search_string = $_GET['search_string'];
if ($search_string)
{
// 공백을 기준으로 배열화
$tmp_string = explode(" ", $search_string);
foreach ($tmp_search as $k=>$v)
{
$array_string[] = "col_subject LIKE '%{$v}%'";
$array_string[] = "strip_tags(col_content) LIKE '%{$v}%'";
}
// 배열을 문자열로 변경
$array_string = implode(" OR ", $array_string);
// (col_subject like '%단어1%' or strip_tags(col_content) like '%단어1%' or bd_subject like '%단어2%' or strip_tags(bd_content) like '%단어2%')
$SRCH_SQL = " AND ({$array_string})";
}
$sql = "SELECT * FROM board WHERE {$SRCH_SQL}";
/* s:쿼리 실행 결과 값 처리 */
/* e:쿼리 실행 결과 값 처리 */
?>
<form method='get' action='this page'>
<input type='text' name='search_string' value='단어1 단어2'/>
<button type='submit'>Search</button>
<!-- s:검색 결과 영역 -->
<!-- e:검색 결과 영역 -->
</form>
반응형
'Database > MySQL' 카테고리의 다른 글
MySQL 속도 측정을 위한 SQL_NO_CACHE (0) | 2021.09.08 |
---|---|
MySQL 변수값 IN() 검색? FIND_IN_SET() 함수 이용 (1) | 2018.12.31 |
MySQL EXPLAIN 사용하여 Query 퍼포먼스 확인. (0) | 2016.09.13 |
group_concat 다중 레코드를 한개 컬럼으로 출력. (0) | 2013.07.15 |
MySQL - 초성검색 (0) | 2013.02.21 |
MySQL (0) | 2011.11.14 |
mysql 백업 및 복구 (0) | 2010.08.29 |
mysql query 날짜 차이 구하기 (0) | 2010.07.22 |