Order by 具有复杂的关系

Order by with complex relationship

我的心情很复杂。

我需要按价格订购。但是,我对价格有逻辑...

cad_product
id
title
store_id

cad_store
id
business_model

//This table can be associated to 1 or more products...
cad_sku
id
product_id

cad_price_sku
id
sku_id
retail
sale_retail
wholesale
sale_wholesale

我需要 sql 按价格订购,但同一产品可以包含 1 个或多个 SKU,而下一个 SKU 的价格可以低于第一个。也就是说,我需要通过每个产品 SKU 和 return 次要价格。

除此之外,我还有一个 business_model 逻辑。产品可以通过 B2C 价格(零售和 sale_retail)、B2B 价格(批发和 sale_wholesale)和两者(b2b 和 b2c 价格)显示。

我试过类似的方法。

SELECT cad_product.title, skuP.retail, skuP.sale_retail, skuP.wholesale, skuP.sale_wholesale 
FROM cad_product
INNER JOIN cad_sku sku ON cad_product.id = sku.product_id
INNER JOIN cad_price_table_sku skuP ON sku.id = skuP.sku_id
INNER JOIN cad_store store ON store.id = cad_product.store_id
WHERE cad_product.deleted_at IS NULL
AND ((skuP.sale_retail <> 0 AND skuP.retail <> 0))
ORDER BY skuP.sale_retail asc, skuP.retail asc, skuP.sale_wholesale asc, skuP.wholesale asc;

而这个结果...

+-----------------------------+--------+-------------+-----------+----------------+
| title                       | retail | sale_retail | wholesale | sale_wholesale |
+-----------------------------+--------+-------------+-----------+----------------+
| Produto de teste - Loja B2C |   1.50 |        1.00 |      0.75 |           0.50 |
| Produto de teste - Loja B2C |  20.00 |       18.00 |     80.00 |           0.00 |
| Novamente TESTE             | 125.23 |     4892.13 |    800.00 |         400.00 |
+-----------------------------+--------+-------------+-----------+----------------+

因此,如果我没有理解错的话,您想按 4 个价格栏中的最低最低价格进行排序。

就是这样做的

SELECT cad_product.title, skuP.retail, skuP.sale_retail, skuP.wholesale, skuP.sale_wholesale 
FROM cad_product
INNER JOIN cad_sku sku ON cad_product.id = sku.product_id
INNER JOIN cad_price_table_sku skuP ON sku.id = skuP.sku_id
INNER JOIN cad_store store ON store.id = cad_product.store_id
WHERE cad_product.deleted_at IS NULL
AND ((skuP.sale_retail <> 0 AND skuP.retail <> 0))
ORDER BY LEAST(skuP.sale_retail, skuP.retail, skuP.sale_wholesale, skuP.wholesale) asc;