내 연구를 기반으로하면 일반적으로 매우 간단한 해결책이있는 매우 일반적인 문제입니다. 내 작업은 여러 쿼리를 에서 변경하는 것입니다. 모든 결과를에 입력하면 이 그룹당 최고 3 개가됩니다.. 처음에는 이것이 잘 진행되고 있었고이 사이트에서 여러 가지 추천 및 답변을 사용하여 가장 많이 본 제품을 만들었습니다. 그러나 여러 개의 조인 때문에 지난 번 "베스트셀러 제품"에 어려움이 있습니다.상위 N 여러 테이블 조인을 사용하는 그룹 당
기본적으로 나는 을 주문해야합니다. # 당 공급 업체 당 최대 제품 수는 3 개입니다. # 원본 쿼리를 만들기 위해 여러 테이블이 결합되어 있으며, 시도 할 때마다 변수를 사용하여 순위를 생성하면 잘못된 결과가 생성됩니다.
제품 표
productid | vendorid | approved | active | deleted
공급 업체 표
vendorid | approved | active | deleted
주문 표
orderid | `status` | deleted
: 문제를 더 잘 이해하는 데 도움합니다 다음은 (나는 간결 불필요한 필드를 제거했습니다) 주문 항목 표
다음과 같이orderitemid | orderid | productid | price
지금, 에 내 원래의 쿼리가이 모든 결과를 얻을 : 마지막으로
SELECT COUNT(oi.price) AS `NumSales`,
p.productid,
p.vendorid
FROM products p
INNER JOIN vendors v ON (p.vendorid = v.vendorid)
INNER JOIN orders_items oi ON (p.productid = oi.productid)
INNER JOIN orders o ON (oi.orderid = o.orderid)
WHERE (p.Approved = 1 AND p.Active = 1 AND p.Deleted = 0)
AND (v.Approved = 1 AND v.Active = 1 AND v.Deleted = 0)
AND o.`Status` = 'SETTLED'
AND o.Deleted = 0
GROUP BY oi.productid
ORDER BY COUNT(oi.price) DESC
LIMIT 100;
(그리고 여기에 내가 난처한 상황에 빠진거야 곳이다), 그와 같은 위의 문을 변경하기 위해 노력하고있어 벤더 당 상위 3 개 제품 (# 판매 기준) 만 받았습니다. 나는 지금까지 가지고있는 것을 더하고 싶지만 그렇게하기에는 당혹 스럽다. 그리고이 질문은 이미 텍스트의 벽이다. 변수를 시도했지만 잘못된 결과가 계속 나타납니다. 어떤 도움이라도 대단히 감사하겠습니다.
로 재설정됩니다, 감사합니다! CROSS JOIN 성명서는 필자의 시도에서 빠진 핵심 요소였습니다. 필자의 견해로는 매우 유용한 쿼리이며, 꽤 많이 사용할 계획입니다. – Jeremy
@jcargilo - FYI 내부 주문을 수정했습니다. vendorid + NumSales 만 가능합니다! – RichardTheKiwi
우수합니다. 감사합니다. – Jeremy