영카트 검색기능에서 3차분류명까지 검색이 가능할까요?

영카트 검색기능에서 3차분류명까지 검색이 가능할까요?

QA

영카트 검색기능에서 3차분류명까지 검색이 가능할까요?

본문

고수님들 아래 코드에서는 상품검색과 1차상품분류명까지 검색이 됩니다. 이 것을 2차,3차의 상품분류명까지 검색이 될 수 있도록 하려면 어디를 수정해야하는지 도움주시면 고맙겠습니다.

 

<search.php>

// 상품명에 검색어가 포한된것과 상품판매가능인것만
$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[] = "b.ca_name";
        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);
 

이 질문에 댓글 쓰기 :

답변 1

아래와 같이 빨간색 부분을 추가해보세요..

직접 해보지 않아서 될지 모르겠네요..

 

$sql_common = " from {$g5['g5_shop_item_table']} a, {$g5['g5_shop_category_table']} b, {$g5['g5_shop_category_table']} c, {$g5['g5_shop_category_table']} d ";

 

$where[] = " (a.ca_id = b.ca_id and a.it_use = 1 and b.ca_use = 1) ";

$where[] = " (a.ca_id2 = c.ca_id and a.it_use = 1 and c.ca_use = 1) ";

$where[] = " (a.ca_id3 = d.ca_id and a.it_use = 1 and d.ca_use = 1) ";

 

if ($search_all || $qid) {

  $concat[] = "b.ca_name";

  $concat[] = "c.ca_name";

  $concat[] = "d.ca_name";

}

아미나 "한별아빠"께서 도움 주셔서 해결하였구요..아래 처럼 수정하여 해결하였습니다.

$where[] = " ((a.ca_id = b.ca_id or a.ca_id2 = b.ca_id or a.ca_id3 = b.ca_id) and a.it_use = 1 and b.ca_use = 1) ";

매번 관심주셔서 감사합니다.

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

회원로그인

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