0

製品のテーブルと製品の輸入業者のテーブルがあるデータベースがあります。私は自分の製品リスト ページでソート システムを実行してきました。名前、価格、およびリリース日によるソートは私にとって問題ではありませんでした。しかし、今度は配達時間によるソートも追加したいと思います。納期はいくつかの異なる要因に依存するため、これは少し複雑です。私の状況を少し理解できる、2 つのテーブルの必要なフィールドを次に示します。

products:

    quantity
    status
    importer (id of product importer)


importers:

    id
    deliveryMin
    deliveryMax

そして、最も速いものから最も遅いものまでの配信状況:

  1. 商品数量が 0 より大きい場合、在庫があることを意味し、納期は 1 ~ 2 日です。その状況では、配達は最速です。

  2. 数量が 0 の場合、輸入業者の納期を探す必要があります。その前に - ステータスを確認する必要があります。したがって、ステータスが 1 の場合、輸入業者 (すべての商品行の商品テーブルでマークされている) に在庫があるので、deliveryMin と deliveryMax について輸入業者テーブルを調べる必要があります。輸入業者が異なれば、deliveryMin と deliveryMax も異なる場合があります。ステータス 1 の製品でも、配達時間が異なる可能性があり、それらも並べ替える必要があるためです。

  3. 数量が 0 で商品ステータスが 2 の場合は、在庫がなく、その商品の輸入業者にも在庫がないことを意味します。これは最も遅い配送オプションで、7 ~ 14 日です。

この方法は複雑すぎて MySQL クエリとして実行できませんか? ORDER BY 納期を記入する欄がなく、非常に多くの工程を経て情報を取得しなければならない場合の方法。

これは、製品ページを表示するときに PHP を使用してコーディングするのが非常に簡単でした。これは、製品が 1 つしかないため、他の製品と比較する必要がないためです。

4

1 に答える 1

0

Product は Importer に属しているように思えます (1 つの製品に複数の Importer を持つことはできませんよね?)。そう:

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
于 2013-10-04T12:24:26.207 に答える