如果某些产品有折扣价格(SQL),如何按价格对产品进行排序?

时间:2015-06-08 07:27:09

标签: php mysql sql

所以我想按价格订购产品 - ASCDESC,但有些产品会在数据库中填入discountprice列,如果有的话 - 应该将它们考虑在内,而不是price字段。

所以目前我有这个: SELECT * FROM products ORDER BY price ASC,但我如何为该特定产品的if (discountprice != '' AND discountprice != NULL) then use discount price条款添加ORDER之类的内容?

4 个答案:

答案 0 :(得分:2)

使用SELECT * FROM products ORDER BY coalesce(discountprice, price) ASC 选择第一个非空值:

CASE

如果由于某种原因,您还将空字符串设为NULL,请使用常规SELECT * FROM products ORDER BY CASE when discountprice is NOT NULL or discountprice != '' THEN discountprice else price end ASC

SELECT * FROM products ORDER BY 
case when (discountprice != '' or discountprice != NULL) 
then
  (price-discountprice)
else
  price
end 
ASC

答案 1 :(得分:2)

试试这个

SELECT *,(price - discountprice) as order_price FROM products  ORDER BY order_price ASC

答案 2 :(得分:2)

创建虚拟列。如果您没有折扣价,则其列必须为0。 按此栏目排序。

<com.facebook.login.widget.LoginButton
    xmlns:fb="http://schemas.android.com/apk/res-auto"
    fb:com_facebook_login_text="Your Text"

如果需要,您可以转换为整数。

答案 3 :(得分:2)

你可以这样做:

SELECT (price-IFNULL(discountprice,0)) as finalprice FROM products
ORDER BY finalprice ASC

如果您尝试按discountprice列排序,可以通过两种方式进行排序:

  1. 使用IFNULL

    SELECT * FROM products
    ORDER BY IFNULL(discountprice, price) ASC
    
  2. 使用COALESCE

    SELECT * FROM products
    ORDER BY COALESCE(discountprice, price) ASC