2016-09-30 3 views
2

私はeコマースのプロジェクトに取り組んで最も古い日付に基づいて取引先を選択したいのです...ここに私の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つのサプライヤです。だから、私がやりたいことは、最初に追加されたサプライヤーに基づいて項目を選択することです(先入れ先出し方式のように)

どうすればよいですかjoin query with timestamp as condition

答えて

0

あなたは、クエリの下に1つのレコードだけをしたい場合は、作業あなたは、サブクエリを使用することができます

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

はINNER JOINをJOINの代わりにLEFT使用しないshoud? – newdeveloper

+0

うん。 http://stackoverflow.com/questions/5706437/whats-the-difference-between-inner-join-left-join-right-join-and-full-join。あなたは上記のURLで気をつけてください。 –

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

これはあなたのために働くことを願っていますが...

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 
関連する問題