一些有关数据库的事先布局知识
我有一个数据库,其中包含以下四个字段
`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的正常价格高于其他价格,它的销售和便宜也应该首先显示。
答案 0 :(得分:1)
由于您仅在两个可能的选项之间切换,我认为IF
比CASE
更简单。
ORDER BY IF(c.isonsale, c.saleprice, c.regularprice)
如果商品正在销售,则IF
表达式将返回销售价格,否则将返回正常价格。