首页 > 解决方案 > SQL - 按大小写或 if 语句编写订单

问题描述

一些关于数据库的前期布局知识

我有一个包含我的商店项目的数据库,其中包含以下四个字段

`c.postdate`, `c.regularprice`, `c.isonsale`, `c.saleprice`

对数据库的标准调用如下所示:

query("SELECT * FROM items WHERE `s.cat` IN (idsarrayishere) AND `s.isactive` = '1' $sort")

这可以从数据库中提取所有内容。的默认值$sort只是空白,因为此时我并不担心,因为我很可能只是使用c.postdate上面列出的字段按最新日期对它们进行排序。

按特定变量对项目进行排序

我希望能够利用ORDER BY CASEmysql 必须能够对我的项目进行排序price highest - lowest,反之亦然。我遇到的问题是我不知道如何编写查询,以便如果c.isonsale = '1'then 由 thec.saleprice而不是 the排序c.regularprice,如果不是,则由 the 排序c.regularprice,所以当他们首先选择最低价格时,它将显示他们与低价商品一起出售商品。这是我迄今为止发现的ORDER BY情况

ORDER BY 
    CASE `type` 
        WHEN 'Member' THEN LNAME 
        WHEN 'Group' THEN GROUPNAME
        ELSE 1 END 
ASC

不确定将其适应我想要做的正确方法。任何有关此问题的帮助将不胜感激,因为 MySQL 文档在学习此过程时有点含糊。

编辑

回应关于添加示例数据和预期结果的回复,因为我的帖子显然不清楚这一点,说我有这三个项目

item => 1
   c.regularprice => 9.99
   c.isonsale => 0
   c.saleprice => 0

item => 2
   c.regularprice => 19.99
   c.isonsale => 1
   c.saleprice => 6.99

item => 3
   c.regularprice => 10.99
   c.isonsale => 0
   c.saleprice => 0

我需要能够先按最低价格排序,然后再按最高价格排序。所以在这个例子中,我希望item 2, item 1, item 3按照这个顺序。尽管商品 2 的正常价格高于其他商品,但它的特价且更便宜,因此应首先显示。

标签: phpmysql

解决方案


由于您只是在两个可能的选项之间切换,我认为IF会比CASE.

ORDER BY IF(c.isonsale, c.saleprice, c.regularprice)

如果商品在售,该IF表达式将返回销售价格,如果不是,则返回正常价格。


推荐阅读