按交货时间订购产品列表 - 在这么多条件下似乎太复杂了


Ordering product listing by delivery time - seems too complicated with so many conditions

我有一个数据库,其中我有一个产品表和一个产品进口商表。我一直在我的产品列表页面上做排序系统,按名称、价格和发布日期排序对我来说不是问题。但是现在我还想添加按交货时间排序。这有点复杂,因为交货时间取决于几个不同的东西。以下是我的两个表的必要字段,可以稍微启发我的情况:

products:
    quantity
    status
    importer (id of product importer)

importers:
    id
    deliveryMin
    deliveryMax

以及从最快到最慢的交付情况:

  1. 如果产品数量大于 0,则意味着我们有库存,交货时间为 1-2 天。在这种情况下,交货是最快的。

  2. 如果数量为0,我们必须寻找进口商的交货时间。在此之前 - 必须检查状态。因此:如果状态为 1,则进口商(在每个产品行的产品表中标记(有库存,然后我们必须查看进口商表以了解交货最小值和交货最大值。不同的进口商可能有不同的交货分钟和交货马克斯,这也应该以某种方式查看。因为状态为 1 的产品仍然可以有不同的交货时间,并且也必须对这些时间进行排序。

  3. 如果数量为 0,产品状态为 2,则意味着我们没有库存,并且没有任何进口商有该产品的库存。这是最慢的交付选项,7-14天。

这种方式是否太复杂而无法作为 MySQL 查询执行?如何按交货时间订购,当没有简单的字段时,但必须使用如此多的步骤获取信息。

在查看产品页面时,使用 PHP 编写代码非常容易,因为当时只有一个产品,您不必将其与任何东西进行比较。

在我看来

,产品属于进口商(一个产品不能有多个进口商,对吗?所以:

SELECT * FROM
(
    SELECT products.*,
    IF(quantity > 0, 1, IF(status=2, 7, importers.deliveryMin)) as delivery_min,
    IF(quantity > 0, 2, IF(status=2, 14, importers.deliveryMax)) as delivery_max
    FROM products LEFT JOIN importers ON
    products.importer = importers.id
) as product_delivery
ORDER BY delivery_max