有关数据库的一些预先布局知识
我有一个包含我的商店商品的数据库,其中包含以下四个字段
`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
字段按最新日期对它们进行排序上面列出了。
按特定变量对项目进行排序
我希望能够利用按情况排序
,mysql必须能够按照价格最高 - 最低
对我的商品进行排序,反之亦然。我遇到的问题是我不知道如何编写查询,以便如果 c.isonsale = '1'
则按 c.saleprice
排序而不是 c.regularprice
,如果不是,则按 c.regularprice
排序,因此当他们首先选择最低价格时,它会向他们显示其中的促销商品价格较低的元素。这是我迄今为止发现的 ORDER BY
with case
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 的正常价格高于其他商品,但它正在打折且更便宜,因此应该首先显示。
最佳答案
由于您只是在两个可能的选项之间切换,我认为 IF
会比 CASE
更简单。
ORDER BY IF(c.isonsale, c.saleprice, c.regularprice)
如果商品正在促销,则该 IF
表达式将返回促销价;如果不是促销,则返回正常价格。
关于php - SQL - 按 case 或 if 语句编写 order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52617254/