sql-按大小写或if语句编写order

fykwrbwg  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(330)

关于数据库的一些知识
我有一个数据库,其中包含以下四个字段

`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 CASE mysql必须能够对我的项目进行排序 price highest - lowest 反之亦然。我遇到的问题是我不知道如何编写查询以便 c.isonsale = '1' 然后按顺序 c.saleprice 而不是 c.regularprice ,如果不是,按 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号商品的正常价格比其他商品高,但它的在售价格和更便宜的价格应该首先显示出来。

aurhwmvo

aurhwmvo1#

既然你只是在两种可能的选择之间切换,我想 IF 将比 CASE .

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

那个 IF 表达式将返回销售价格(如果商品正在销售),如果商品没有销售,则返回常规价格。

相关问题