按交货时间订购产品清单 - 这么多条件似乎太复杂了

时间:2013-10-04 12:11:55

标签: php mysql

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

products:

    quantity
    status
    importer (id of product importer)


importers:

    id
    deliveryMin
    deliveryMax

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

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

  2. 如果数量为0,我们必须查找进口商的交货时间。在此之前 - 必须检查状态。所以:如果status为1,则导入器(在每个产品行的products表中标记)都有库存,然后我们必须查看importMin和deliveryMax的importers表。不同的进口商可能有不同的deliveryMin和deliveryMax,这应该以某种方式看起来。因为状态为1的产品仍然可以具有不同的交货时间,并且那些产品也必须进行分类。

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

  4. 这样做太复杂了,不能作为MySQL查询执行吗?如何在没有简单的字段的情况下按交货时间排序,但必须使用这么多步骤获取信息。

    在查看产品页面时,使用PHP编写代码非常简单,因为只有一个产品,您无需将其与任何内容进行比较。

1 个答案:

答案 0 :(得分:0)

在我看来,产品属于进口商(一个产品不能有多个进口商,是不是?)。所以:

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