영카트 상품검색시 띄어쓰기 없이 할려면 어떻게 해야되나요?

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
영카트 상품검색시 띄어쓰기 없이 할려면 어떻게 해야되나요?

QA

영카트 상품검색시 띄어쓰기 없이 할려면 어떻게 해야되나요?

본문

shop/search.php 소스인데요. 영카트 상품검색시 오늘 상품오늘상품 이렇게 띄어쓰기 없이 검색되게 할려면 어떻게 해야될까요? 무조건 상품입력시 했던 띄어쓰기를 다르게 인식하네요

오늘+상품이렇게 되네요 ㅠㅠ

고수님들 부탁드려요

 


<?php
include_once('./_common.php');
define('IS_SHOP_SEARCH', true);
if (G5_IS_MOBILE) {
    include_once(G5_MSHOP_PATH.'/search.php');
    return;
}
$g5['title'] = "상품 검색 결과";
include_once('./_head.php');
// QUERY 문에 공통적으로 들어가는 내용
// 상품명에 검색어가 포한된것과 상품판매가능인것만
$sql_common = " from {$g5['g5_shop_item_table']} a, {$g5['g5_shop_category_table']} b ";
$where = array();
$where[] = " (a.ca_id = b.ca_id and a.it_use = 1 and b.ca_use = 1) ";
$search_all = true;
// 상세검색 이라면
if (isset($_GET['qname']) || isset($_GET['qexplan']) || isset($_GET['qid']) || isset($_GET['qbasic']))
    $search_all = false;
$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 = '';
}
if(!($qname || $qexplan || $qid || $qbasic))
    $search_all = true;
// 검색범위 checkbox 처리
$qname_check = false;
$qexplan_check = false;
$qid_check = false;
$qbasic_check = false;
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;
}
if ($q) {
    $arr = explode(" ", $q);
    $detail_where = array();
    for ($i=0; $i<count($arr); $i++) {
        $word = trim($arr[$i]);
        if (!$word) continue;
        $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).")";
        $detail_where[] = $concat_fields." like '%$word%' ";
        // 인기검색어
        insert_popular($concat, $word);
    }
    $where[] = "(".implode(" and ", $detail_where).")";
 
}
if ($qcaid)
    $where[] = " a.ca_id like '$qcaid%' ";
if ($qfrom && $qto)
    $where[] = " a.it_price between '$qfrom' and '$qto' ";
$sql_where = " where " . implode(" and ", $where);
// 상품 출력순서가 있다면
$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';
}
// 총몇개 = 한줄에 몇개 * 몇줄
$items = $default['de_search_list_mod'] * $default['de_search_list_row'];
// 페이지가 없으면 첫 페이지 (1 페이지)
if ($page < 1) $page = 1;
// 시작 레코드 구함
$from_record = ($page - 1) * $items;
// 검색된 내용이 몇행인지를 얻는다
$sql = " select COUNT(*) as cnt $sql_common $sql_where ";
$row = sql_fetch($sql);
$total_count = $row['cnt'];
$total_page  = ceil($total_count / $items); // 전체 페이지 계산
$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);
$categorys = array();
// 검색된 분류를 배열에 저장
while($row = sql_fetch_array($result)){
    $categorys[] = $row;
}
$q = get_text($q);
$search_skin = G5_SHOP_SKIN_PATH.'/search.skin.php';
$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 ");
}
if(!file_exists($search_skin)) {
    echo str_replace(G5_PATH.'/', '', $search_skin).' 스킨 파일이 존재하지 않습니다.';
} else {
    include_once($search_skin);
}
include_once('./_tail.php');

이 질문에 댓글 쓰기 :

답변 3

$arr = explode(" ", $q);

수정

$arr[0]= trim($q);

맨밑에보면 $sql 보이잖아요 거기 밑에 echo $sql;로 하면 쿼리 어떻게 나와요?

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

컴퓨터(프로그램)이

오늘상품을

오늘, 상품 이렇게 두 단어로 인식하게 하는 것은 단순한 작업이 아닙니다.

트릭을 쓰자면

상품 제목을 띄어쓰기 있는 것과 없는 것 두 개(이상)를 저장하고 나중에 문자열 검색하는 거죠.

답변을 작성하시기 전에 로그인 해주세요.
전체 124,234 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT