我已经解决了以下问题,还增加了额外的水平,考虑了当前时间,因为有些供应商无法在一天中的某个时间后准时交货。我没有包括的是一笔金额(股票)。我已将该字段添加到产品表中作为sumStock,并且每当更改库存记录时始终更新它。
SELECT sp.price
, p.*
FROM products p
LEFT JOIN stock_products sp
USING (ean)
WHERE sp.id = IFNULL(
(SELECT psi.id
FROM stock_products psi
JOIN suppliers sup
ON psi.pid = sup.id
WHERE psi.ean = p.ean
AND psi.stock > 0
ORDER BY IF(sup.time>40667, sup.deliveryTime, sup.deliveryTime+86400)
, price
LIMIT 1)
,
(SELECT psi.id
FROM stock_products psi
JOIN suppliers sup
ON psi.pid = sup.id
WHERE psi.ean = p.ean
ORDER BY IF(sup.time>40667, sup.deliveryTime, sup.deliveryTime+86400)
, price
LIMIT 1)
ORDER BY price请注意,我在产品没有库存的罕见情况下使用IFNULL。我还是想展示那些记录。查询有点短,但没有,但这是我最终使用的完整解决方案。
此外,40667是表示当前时间的数字。它应该是自午夜以来的当前秒数。