채택완료
검색/추천 쿼리질문 드려요. (큐레이션 만드는중입니다)
1,2,3,4,n개의 질문을 해서 맞품형 제품을 추천해주는 걸 구현해보려고 하는데
어떤식으로 해주면 좋을까요?
지금 생각하는거는
Product라는 테이블에 제품을 등록할땐
ABC ABB
ABC BBB
ABC CCC
BBB CCC
이런 코드를 Acode 항목에 넣어두었습니다.
설문에 답을 하면 2개의 Acode라는값을 검색하게 됩니다.
예를 들어 2개의 질문을 답하면
Copy
SELECT * FROM Product WHERE Acode Like '%ABC%' UNION ALL SELECT * FROM Product WHERE A Like '%BBB%'
그런데 제가 찾고 싶은거는 ABC BBB 가 우선적으로 나왔으면 합니다... 받대로 BBB ABC를 선택을해도 ABC BBB라고 등록된 상품이 우선적으로 검색되면 좋을것 같구요..
어떤식으로 접근하면 좋을까요?
제품수가 늘어나도 최대한 많이 포함된 상품이 나왔으면 합니다.
각 질문의 답마다 3자리코드를 넣어두고 최대한 근접한 제품을 추천해주도록 만들어보고 있습니다.
답변 4개 / 댓글 13개
채택된 답변
+20 포인트
이런식으로 한번...(저도 코드를 돌려보지 않았습니다만)
Copy
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
order 는 @닥시 님 말이 맞는듯 합니다.
그리고 저걸 굳이 union 으로 해야 되나요? 그냥 or 로 연결해도 되지 않나요?
답변에 대한 댓글 7개
쿼리에서 Acode 필드와 A 필드 동일 필드 인가요??
order by Acode
끝에 추가하면 되지 않나요?
답변에 대한 댓글 6개
group by 조건이 좀 잘못 된 것 같구요.
group by사용시 집계함수집계함수(COUNT, SUM, AVG, MAX, MIN 같은)로 생성하는 필드 외에는 group by에 명시된 필드만 사용할 수 있습니다.
group by 에 명시된 필드 기준으로 필드값들이 같으면 한개의 레코드로 표현하기 때문에 그렇습니다. 집계함수들은 레코드들이 대표되는 레코드하나로 통합 될 때 옵션을 주는 것이라 생각하시면 됩니다.
phpmyadmin 이나 workbanch 같은 툴에서 쿼리에 에러가 없는지 먼저 확인해보시고 php에 적용해보세요.
[code]
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
[/code]
group by사용시 집계함수집계함수(COUNT, SUM, AVG, MAX, MIN 같은)로 생성하는 필드 외에는 group by에 명시된 필드만 사용할 수 있습니다.
group by 에 명시된 필드 기준으로 필드값들이 같으면 한개의 레코드로 표현하기 때문에 그렇습니다. 집계함수들은 레코드들이 대표되는 레코드하나로 통합 될 때 옵션을 주는 것이라 생각하시면 됩니다.
phpmyadmin 이나 workbanch 같은 툴에서 쿼리에 에러가 없는지 먼저 확인해보시고 php에 적용해보세요.
[code]
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
[/code]
답변을 작성하려면 로그인이 필요합니다.
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에서는 그런 옵션이 없어보여요