按复杂关系排序

时间:2017-03-23 14:10:07

标签: mysql sql sql-order-by

我有一个复杂而混乱的风景。

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

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并返回该次要价格。

除此之外,我还有一个business_model逻辑。如果产品可以通过您的B2C价格(零售和sale_retail)显示,B2B价格(批发和销售_批发)e两种(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 |
+-----------------------------+--------+-------------+-----------+----------------+

1 个答案:

答案 0 :(得分:0)

因此,如果我理解正确,您需要按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;