통합 검색 any keyword 검색 방법 0 0 1,477

by 비연 [MySQL] 통합검색 match against any keyword [2018.04.11 11:20:49]


안녕하세요. 

통합검색 관련하여문의좀 드리려고 합니다.

현재 테이블은 메인테이블 (a_test)가 있고 관련 항목들을 담고 있는 b_test, c_test 가 있습니다. 

또한 codelist 라고 하여 각 테이블에 담겨있는 코드값들의 명칭(description)이 정의되어 있는 테이블이 있습니다. 

이럴경우 keyword(통합검색어) 입력시 저 3개 테이블을 조회해서 데이터를 가져오는 방법을 알고 싶습니다. 

mysql 이라 match , against 를 이용도 해보는데, 이건은 하나의 테이블에서만 효력이 있는거 같더라구요. 

inner join 해서 match (XX) against('test') or match(BB) against('test') 이런 방식도 있다고 하고, union으로 저 3개 테이블 걸어서 처리하는 방법도 있다고는 하지만, 

저 codelist(명칭이 들어가 있는 테이블)의 description 으로 keyword검색이 되어야 해서 여쭙니다. 

아님 다른 분들은 어떤 방식으로 통합검색을 구현하시는지 궁금합니다. 

도움 부탁드립니다.

아래는 현재 가져오는 쿼리입니다. 검색조건들이 여러개 존재를 하는 상태에서 keyword 라는 통합 검색어가 존재해야 하는 상황입니다. 

SELECT a.rma_no, a.csr_no, a.rma_pub_date, b.csr_title , a.rma_company_cd, 
fn_code_filter_nm('MC1002', 1, a.rma_company_cd, 'ko') as rma_company_nm , a.rma_mng_member, 
fn_member_nm(a.rma_mng_member, 'ko') as rma_mng_member_nm , a.rma_warrenty_cd , 
fn_code_filter_nm('MC1027', 1, a.rma_warrenty_cd, 'ko') as rma_warrenty_nm , a.rma_fault_cd, 
fn_code_filter_nm('MC1026', 1, a.rma_fault_cd, 'ko') as rma_fault_nm , a.rma_charge_cd, 
fn_code_filter_nm('MC1038', 1, a.rma_charge_cd, 'ko') as rma_charge_nm , a.rma_cast_amt , a.rma_doa_div, 
CASE WHEN a.rma_doa_div = 'R' THEN 'RMA' WHEN a.rma_doa_div = 'D' THEN 'DOA' END as rma_doa_div_nm , a.rma_res_type, 
fn_code_filter_nm('MC1039', 1, a.rma_res_type, 'ko') as rma_res_type_nm , a.rma_prod_div, 
fn_code_filter_nm('MC1040', 1, a.rma_prod_div, 'ko') as rma_prod_div_nm , a.rma_warehousing_place, a.rma_ship_place , 
a.rma_chk_content, a.rma_review_cause_content , a.rma_actrst_cd , 
fn_code_filter_nm('MC1031', 1, a.rma_actrst_cd, 'ko') as rma_actrst_nm , a.rma_actrst_content , b.csr_status , 
fn_code_filter_nm('MC1011', 1, b.csr_status, 'ko') as csr_status_nm , a.rma_status , 
fn_code_filter_nm('MC1011', 1, a.rma_status, 'ko') as rma_status_nm , a.rma_mes_status , 
vmes.fn_mes_code_nm('pdsts', a.rma_mes_status) as rma_mes_status_nm , b.csr_customer_cd, fn_customer_nm(b.csr_customer_cd, ?) as csr_customer_nm , 
a.date_created, a.date_updated, a.creator, a.updater , b.customer_div_cd , e.csr_model_cd , 
(select category_nm from sy_prod_category_master where category_cd = e.csr_model_cd) as csr_model_nm , 
c.csr_faildef_div, fn_code_filter_nm('MC1010', 1, c.csr_faildef_div, 'ko') as csr_faildef_div_nm , 
d.csr_failsymp_div, (select category_nm from sy_category_master where category_cd = csr_failsymp_div )as csr_failsymp_div_nm , 
b.csr_close_reasondiv_cd, (select category_nm from sy_category_master where category_cd = csr_close_reasondiv_cd )as csr_close_reasondiv_nm , 
e.csr_sn_no01 
FROM vcs.cs_rma a 
LEFT OUTER JOIN (select distinct csr_no, csr_title, csr_status, csr_customer_cd, csr_customer_member, 
csr_req_member, csr_close_reasondiv_cd, customer_div_cd, csr_reqtype_cd, csr_close_actrst_cd, csr_close_actdiv_cd, 
csr_receipt_member from cs_csr group by csr_no) b ON a.csr_no = b.csr_no 
LEFT OUTER JOIN (select distinct csr_no, csr_faildef_div from cs_csr_faildef group by csr_no) c ON a.csr_no = c.csr_no 
LEFT OUTER JOIN (select distinct csr_no, csr_failsymp_div from cs_csr_failsymp group by csr_no) d ON a.csr_no = d.csr_no 
LEFT OUTER JOIN (select distinct csr_no,csr_model_cd, csr_sn_no01 from cs_csr_prod group by csr_no) e ON a.csr_no = e.csr_no 
WHERE a.rma_pub_date BETWEEN '20180101' AND '20180411' 
AND a.rma_status IN ( '40' ) 
ORDER BY date_created desc LIMIT 0, 10

위에서 보시다 싶히 fn_code_filter_nm 라고 하여 codelist에서 명칭을 가지고 오게 함수로 처리해 놓은 상태입니다. 

저 상태에서 못해도 저 select 구문에서 가져오는 컬럼들에 대한 통합 검색(like)이 가능해야 합니다. 

글이 너무 어려운지 모르겟습니다. 

도움 부타드립니다.

 

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입