SQL-按大小写或if语句编写订单

时间:2018-10-02 22:23:01

标签: php mysql

一些有关数据库的事先布局知识

我有一个数据库,其中包含以下四个字段

`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的正常价格高于其他价格,它的销售和便宜也应该首先显示。

1 个答案:

答案 0 :(得分:1)

由于您仅在两个可能的选项之间切换,我认为IFCASE更简单。

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

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