2013-08-26 3 views
0

사람들이 웹 상점에서 주문한 항목을 포함하는 order_items (idorder, iditem, amount) MySQL 테이블이 있다고 가정 해 봅니다. 비슷한 금액의 유사 주문을 가진 다른 주문을 찾음으로써 주문 X와 유사한 주문을 찾고 싶습니다.목록 간의 중복을 찾는 효율적인 SQL 쿼리

SELECT SQL_CALC_FOUND_ROWS 
      SUM(GREATEST(1, LEAST(cown.amount, cother.amount))) hits, 
      cother.`idorder` 
      FROM order_items cown 
      LEFT JOIN order_items cother ON (
       cother.`idorder` != 1 
       AND cown.iditem = cother.iditem 
      ) 
      WHERE cown.`idorder` = 1 AND cother.idorder IS NOT NULL 
      GROUP BY cother.idorder ASC 
      ORDER BY hits DESC 

이 주어진 순서에서 모든 항목을 선택하고 왼쪽 다른 주문에서 항목을 결합 :

여기에 내 현재의 접근 방식입니다. 그런 다음 다른 주문 ID별로 그룹화하고 둘 사이의 겹침 정도를 요약합니다.

더 효율적인 방법이 있습니까?

답변

0

추천 엔진이 필요합니다. 그것은 평범한 SQL에서 구현하는 것이 까다로울 것입니다. 처음에는 Apache Mahout 프로젝트를 살펴보십시오.

Mahout 및 MySQL의 좋은 예가 있습니다. github에서 직접 사용해 볼 수 있습니다 : https://github.com/jasebell/RecommenderDemo 그리고 원하는 것으로 보입니다.

+0

이것은 재미있어 보이지만 내 목적에 과도한 부담이 될 수 있습니다. 나는 또한 이것을 PHP에서 실행해야 할 것이다. – Nils

+0

그러면 도움이 될 것입니다 : http://api.shephertz.com/cloudapidocs/guide/0.8.1.1/php/recommendation_api.html – Kris