검색/추천 쿼리질문 드려요. (큐레이션 만드는중입니다)

검색/추천 쿼리질문 드려요. (큐레이션 만드는중입니다)

QA

검색/추천 쿼리질문 드려요. (큐레이션 만드는중입니다)

본문

1,2,3,4,n개의 질문을 해서 맞품형 제품을 추천해주는 걸 구현해보려고 하는데

 

어떤식으로 해주면 좋을까요?

 

지금 생각하는거는 

 

Product라는 테이블에 제품을 등록할땐

ABC ABB

ABC BBB

ABC CCC

BBB CCC

이런 코드를 Acode 항목에 넣어두었습니다.

 

 

설문에 답을 하면 2개의 Acode라는값을 검색하게 됩니다.

예를 들어 2개의 질문을 답하면

 


SELECT * FROM Product WHERE Acode Like '%ABC%' UNION ALL SELECT * FROM Product WHERE A Like '%BBB%' 

 

그런데 제가 찾고 싶은거는 ABC BBB 가 우선적으로 나왔으면 합니다... 받대로 BBB ABC를 선택을해도 ABC BBB라고 등록된 상품이 우선적으로 검색되면 좋을것 같구요..

 

어떤식으로 접근하면 좋을까요?

 

제품수가 늘어나도 최대한 많이 포함된 상품이 나왔으면 합니다.

 

각 질문의 답마다 3자리코드를 넣어두고 최대한 근접한 제품을 추천해주도록 만들어보고 있습니다.

 

이 질문에 댓글 쓰기 :

답변 4

이런식으로 한번...(저도 코드를 돌려보지 않았습니다만)


select id,item_nm,COUNT(*) as order_weight
from (
    select ID,item_nm from product
    where Acode like'%ABC%'
    union all
    select ID,item_nm from product
    where Acode like'%BBC%'
    union all
    select ID,item_nm from product
    where Acode like'%EEE%'
) as T
group by id,item_nm
order by order_weight desc

쿼리에서 Acode 필드와 A 필드 동일 필드 인가요??

 

order by Acode

끝에 추가하면 되지 않나요?

 

혹시 위 쿼리를 그대로 적용하셨나요?
저는 그냥 예를 들어서 작성한 건데...
id,item_nm 같은 필드는 제가 임의로 쓴 것입니다. Acode, product 같은건 welcome님 질문에 있는 걸 그냥 쓴거구요.

welcome님 상황에 맞게 변경하셔야 합니다.

닥시님 말씀대로 코드는 정리해놨는데


//삭제

아무것도 안뜨더라구요.ㅠㅠ
mysqli_fetch_assoc 에서 못불러오는건가 싶어요... 제가 잘못 방향을 잡았을까요?

==> phpmyadmin에서 쿼리문만 넣으면 잘되는데 while 문넣어서 출력하려고 하면 안나오네요..

group by 조건이 좀 잘못 된 것 같구요.
group by사용시 집계함수집계함수(COUNT, SUM, AVG, MAX, MIN 같은)로 생성하는 필드 외에는 group by에 명시된 필드만 사용할 수 있습니다.
group by 에 명시된 필드 기준으로 필드값들이 같으면 한개의 레코드로 표현하기 때문에 그렇습니다. 집계함수들은 레코드들이 대표되는 레코드하나로 통합 될 때 옵션을 주는 것이라 생각하시면 됩니다.

phpmyadmin 이나 workbanch 같은 툴에서 쿼리에 에러가 없는지 먼저 확인해보시고 php에 적용해보세요.


SELECT PdName,PdUrl,PdImgUrl,PdDesc,Lookcode, COUNT(*) as order_weight 
from (
	SELECT * FROM Q_Product WHERE Lookcode Like '%DRY%' 
	UNION ALL 
	SELECT * FROM Q_Product WHERE Lookcode Like '%CRM%'
	) as T 
group by PdName,PdUrl,PdImgUrl,PdDesc,Lookcode
order by order_weight desc

order 는 님 말이 맞는듯 합니다.

그리고 저걸 굳이 union 으로 해야 되나요? 그냥 or 로 연결해도 되지 않나요?

저도 고민하고 있습니다.
SELECT * FROM Product WHERE Acode Like '%ABC%' OR SELECT * FROM Product WHERE Acode Like '%BBB%' OR SELECT * FROM Product WHERE Acode Like '%DDD%' . ....
이런식으로 나갈텐데... 정렬을 매칭이 많이 되는 순서대로 하려고 하는데 order by에서는 그런 옵션이 없어보여요


"그런데 제가 찾고 싶은거는 ABC BBB 가 우선적으로 나왔으면 합니다... 받대로 BBB ABC를 선택을해도 ABC BBB라고 등록된 상품이 우선적으로 검색되면 좋을것 같구요.."
이렇게 말씀하셨는데 이 두가지 경우에서 매칭이 많이 된 것을 어떤 기준으로 판단하나요?
매칭으로 본다면 BBB ABC 로 선택되면 BBB ABC가 먼저 나와야 하는거 아닌가요?

매칭이 많이 나오는건 select count(*) as cnt .. groub by 하시고
order by cnt 하시면 될거 같은데요?

정확한 쿼리는 사용하고자 하는 column 에 달려 있고 각 상품에 대해 세부 정보를 알고 싶으면
inner join  등을 이용하시면 됩니다.


혹시 위 쿼리를 그대로 적용하셨나요?
저는 그냥 예를 들어서 작성한 건데...
id,item_nm 같은 필드는 제가 임의로 쓴 것입니다. Acode, product 같은건 welcome님 질문에 있는 걸 그냥 쓴거구요.

welcome님 상황에 맞게 변경하셔야 합니다.

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

회원로그인

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