2016-09-30 3 views
2
나는 전자 상거래 프로젝트를 진행하고 오래된 날짜를 기준으로 공급 업체를 선택하려는입니다

는 ... 여기 내 DB 설계가장 오래된 날짜를 기준으로 공급자를 어떻게 선택할 수 있습니까?

제품

id(PK) name   price added_date(DATE) 
1  Samsung Note 180000 2016-09-30 
2  Nokia Lumia 510 215000 2016-09-29 

공급

id(PK) name  registered_date(timestamp) stock 
1 Easyshop 2016-09-30 12:50:12    10 
2 T-mobile 2016-09-30 12:55:36    10 
입니다

product_supplier

itemid(pk) supplierid(pk) 
1   2 
1   1 

위의 1을 2 개 공급 업체로 볼 수 있습니다. 그래서, 내가 뭘하고 싶은지 : 먼저 추가 된 공급자 (FIFO 방식 - 선입 선출 방식)와 같은 항목을 선택하는 것입니다

어떻게 할 수 있습니까 join query with timestamp as condition? 그런 다음 쿼리 아래 하나의 레코드 만이 작업

select product.* from product p LEFT JOIN product_supplier on product.id = itemid 
LEFT JOIN supplier ON supplierid = supplier.id 
order by registered_date ASC 
LIMIT 1; 

답변

0

당신은 하위 쿼리를 사용할 수 있습니다. 하위 쿼리에서는 GROUP BY 및 Max를 사용합니다. 이 당신을 위해 작동합니다

SELECT PS.itemid, PS.supplierid, P.name, P.price, P.added_date, S.name, S.registered_date FROM product_supplier AS PS 
LEFT JOIN Product AS P ON P.id = PS.itemid 
LEFT JOIN Supplier AS S ON S.id = PS.supplierid 
GROUP BY PS.itemid 
ORDER BY PS.itemid LIMIT 1 
+0

은 INNER 대신 LEFT의 조인 사용하지 갈까요? – newdeveloper

+0

예. http://stackoverflow.com/questions/5706437/whats-the-difference-between-inner-join-left-join-right-join-and-full-join. 위의 URL로 지나가시기 바랍니다. –

0

해야합니다

0

희망 ...

select product_supplier.*, product.name, supplier.name, from 
    product_supplier 
    join product on (product_supplier.itemid = product.id) 
    join supplier on (product_supplier.supplierid = supplier.id) 
    order by supplier.registered_date asc 
관련 문제