2016-09-30 4 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?

ответ

0

Если вы хотите только одна запись, то ниже запрос должен быть работа

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 вместо LEFT JOIN? – 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