영카트 상품검색시 띄어쓰기 없이 할려면 어떻게 해야되나요? 채택완료
파트라슈님
3년 전
조회 1,792
shop/search.php 소스인데요. 영카트 상품검색시 오늘 상품을 오늘상품 이렇게 띄어쓰기 없이 검색되게 할려면 어떻게 해야될까요? 무조건 상품입력시 했던 띄어쓰기를 다르게 인식하네요
오늘+상품이렇게 되네요 ㅠㅠ
고수님들 부탁드려요
</p>
<p><?php
include_once('./_common.php');</p>
<p>define('IS_SHOP_SEARCH', true);</p>
<p>if (G5_IS_MOBILE) {
include_once(G5_MSHOP_PATH.'/search.php');
return;
}</p>
<p>$g5['title'] = "상품 검색 결과";
include_once('./_head.php');</p>
<p>// QUERY 문에 공통적으로 들어가는 내용
// 상품명에 검색어가 포한된것과 상품판매가능인것만
$sql_common = " from {$g5['g5_shop_item_table']} a, {$g5['g5_shop_category_table']} b ";</p>
<p>$where = array();
$where[] = " (a.ca_id = b.ca_id and a.it_use = 1 and b.ca_use = 1) ";</p>
<p>$search_all = true;
// 상세검색 이라면
if (isset($_GET['qname']) || isset($_GET['qexplan']) || isset($_GET['qid']) || isset($_GET['qbasic']))
$search_all = false;</p>
<p>$q = utf8_strcut(get_search_string(trim($_GET['q'])), 30, "");
$qname = isset($_GET['qname']) ? trim($_GET['qname']) : '';
$qexplan = isset($_GET['qexplan']) ? trim($_GET['qexplan']) : '';
$qid = isset($_GET['qid']) ? trim($_GET['qid']) : '';
$qbasic = isset($_GET['qbasic']) ? trim($_GET['qbasic']) : '';
$qcaid = isset($_GET['qcaid']) ? preg_replace('#[^a-z0-9]#i', '', trim($_GET['qcaid'])) : '';
$qfrom = isset($_GET['qfrom']) ? preg_replace('/[^0-9]/', '', trim($_GET['qfrom'])) : '';
$qto = isset($_GET['qto']) ? preg_replace('/[^0-9]/', '', trim($_GET['qto'])) : '';
if (isset($_GET['qsort'])) {
$qsort = trim($_GET['qsort']);
$qsort = preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\s]/", "", $qsort);
} else {
$qsort = '';
}
if (isset($_GET['qorder'])) {
$qorder = preg_match("/^(asc|desc)$/i", $qorder) ? $qorder : '';
} else {
$qorder = '';
}</p>
<p>if(!($qname || $qexplan || $qid || $qbasic))
$search_all = true;</p>
<p>// 검색범위 checkbox 처리
$qname_check = false;
$qexplan_check = false;
$qid_check = false;
$qbasic_check = false;</p>
<p>if($search_all) {
$qname_check = true;
$qexplan_check = true;
$qid_check = true;
$qbasic_check = true;
} else {
if($qname)
$qname_check = true;
if($qexplan)
$qexplan_check = true;
if($qid)
$qid_check = true;
if($qbasic)
$qbasic_check = true;
}</p>
<p>if ($q) {
$arr = explode(" ", $q);
$detail_where = array();
for ($i=0; $i<count($arr); $i++) {
$word = trim($arr[$i]);
if (!$word) continue;</p>
<p> $concat = array();
if ($search_all || $qname)
$concat[] = "a.it_name";
if ($search_all || $qexplan)
$concat[] = "a.it_explan2";
if ($search_all || $qid)
$concat[] = "a.it_id";
if ($search_all || $qbasic)
$concat[] = "a.it_basic";
$concat_fields = "concat(".implode(",' ',",$concat).")";</p>
<p> $detail_where[] = $concat_fields." like '%$word%' ";</p>
<p> // 인기검색어
insert_popular($concat, $word);
}</p>
<p> $where[] = "(".implode(" and ", $detail_where).")";
}</p>
<p>if ($qcaid)
$where[] = " a.ca_id like '$qcaid%' ";</p>
<p>if ($qfrom && $qto)
$where[] = " a.it_price between '$qfrom' and '$qto' ";</p>
<p>$sql_where = " where " . implode(" and ", $where);</p>
<p>// 상품 출력순서가 있다면
$qsort = strtolower($qsort);
$qorder = strtolower($qorder);
$order_by = "";
// 아래의 $qsort 필드만 정렬이 가능하게 하여 다른 필드로 하여금 유추해 볼수 없게함
if (($qsort == "it_sum_qty" || $qsort == "it_price" || $qsort == "it_use_avg" || $qsort == "it_use_cnt" || $qsort == "it_update_time") &&
($qorder == "asc" || $qorder == "desc")) {
$order_by = ' order by ' . $qsort . ' ' . $qorder . ' , it_order, it_id desc';
}</p>
<p>// 총몇개 = 한줄에 몇개 * 몇줄
$items = $default['de_search_list_mod'] * $default['de_search_list_row'];
// 페이지가 없으면 첫 페이지 (1 페이지)
if ($page < 1) $page = 1;
// 시작 레코드 구함
$from_record = ($page - 1) * $items;</p>
<p>// 검색된 내용이 몇행인지를 얻는다
$sql = " select COUNT(*) as cnt $sql_common $sql_where ";
$row = sql_fetch($sql);
$total_count = $row['cnt'];
$total_page = ceil($total_count / $items); // 전체 페이지 계산</p>
<p>$sql = " select b.ca_id, b.ca_name, count(*) as cnt $sql_common $sql_where group by b.ca_id order by b.ca_id ";
$result = sql_query($sql);</p>
<p>$categorys = array();
// 검색된 분류를 배열에 저장
while($row = sql_fetch_array($result)){
$categorys[] = $row;
}</p>
<p>$q = get_text($q);
$search_skin = G5_SHOP_SKIN_PATH.'/search.skin.php';</p>
<p>$list_file = G5_SHOP_SKIN_PATH.'/'.$default['de_search_list_skin'];
if (file_exists($list_file) && is_include_path_check($list_file)) {
define('G5_SHOP_CSS_URL', G5_SHOP_SKIN_URL);
$list = new item_list($list_file, $default['de_search_list_mod'], $default['de_search_list_row'], $default['de_search_img_width'], $default['de_search_img_height']);
$list->set_query(" select * $sql_common $sql_where {$order_by} limit $from_record, $items ");
}</p>
<p>if(!file_exists($search_skin)) {
echo str_replace(G5_PATH.'/', '', $search_skin).' 스킨 파일이 존재하지 않습니다.';
} else {
include_once($search_skin);
}</p>
<p>include_once('./_tail.php');</p>
<p>
댓글을 작성하려면 로그인이 필요합니다.
답변 3개
채택된 답변
+20 포인트
답변에 대한 댓글 3개
�
파트라슈님
3년 전
남겨주신 대로 적용했는데 띄어쓰기 검색을 않했을때는 검색이 안되요
�
균이
3년 전
다음 처럼 수정해보세요
$concat[] = "a.it_name";
수정
$concat[] = "a.it_name";
$concat[] = "replace(a.it_name, ' ','')";
$concat[] = "a.it_name";
수정
$concat[] = "a.it_name";
$concat[] = "replace(a.it_name, ' ','')";
�
파트라슈님
3년 전
감사합니다. 지금 은 잘됩니다. 마지막 남겨주신댓글 너무 감사합니다.
댓글을 작성하려면 로그인이 필요합니다.
3년 전
컴퓨터(프로그램)이
오늘상품을
오늘, 상품 이렇게 두 단어로 인식하게 하는 것은 단순한 작업이 아닙니다.
트릭을 쓰자면
상품 제목을 띄어쓰기 있는 것과 없는 것 두 개(이상)를 저장하고 나중에 문자열 검색하는 거죠.
로그인 후 평가할 수 있습니다
답변에 대한 댓글 2개
�
파트라슈님
3년 전
제가 상품에 띄어쓰기가 되어있어서 띄어쓰기 무관하게 검색이 되고 싶어서요.
�
엑스엠엘
3년 전
방법은 인공지능 비슷한 것이 있거나
상품명을 띄어쓰기 없는 문자열로 추가 저장하거나
다른 방법은 안 떠오르네요.
상품명을 띄어쓰기 없는 문자열로 추가 저장하거나
다른 방법은 안 떠오르네요.
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 2개
�
파트라슈님
3년 전
select b.ca_id, b.ca_name, count(*) as cnt from g5_shop_item a, g5_shop_category b where (a.ca_id = b.ca_id and a.it_use = 1 and b.ca_use = 1) and (concat(a.it_name,' ',a.it_explan2,' ',a.it_id,' ',a.it_basic) like '%쇼니%' and concat(a.it_name,' ',a.it_explan2,' ',a.it_id,' ',a.it_basic) like '%자견용%' ) group by b.ca_id order by b.ca_id 띄어쓰기해서 검색하면 상품이 나옵니다. 근데 띄어쓰기 없이 하면 안나옵니다.
�
파트라슈님
3년 전
띄어쓰기 않하면은 이렇게 나옵니다.
select b.ca_id, b.ca_name, count(*) as cnt from g5_shop_item a, g5_shop_category b where (a.ca_id = b.ca_id and a.it_use = 1 and b.ca_use = 1) and (concat(a.it_name,' ',a.it_explan2,' ',a.it_id,' ',a.it_basic) like '%쇼니%' and concat(a.it_name,' ',a.it_explan2,' ',a.it_id,' ',a.it_basic) like '%자견용%' ) group by b.ca_id order by b.ca_id
select b.ca_id, b.ca_name, count(*) as cnt from g5_shop_item a, g5_shop_category b where (a.ca_id = b.ca_id and a.it_use = 1 and b.ca_use = 1) and (concat(a.it_name,' ',a.it_explan2,' ',a.it_id,' ',a.it_basic) like '%쇼니%' and concat(a.it_name,' ',a.it_explan2,' ',a.it_id,' ',a.it_basic) like '%자견용%' ) group by b.ca_id order by b.ca_id
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인