php - 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 CASE
mysql 必须能够对我的项目进行排序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 的正常价格高于其他商品,但它的特价且更便宜,因此应首先显示。
解决方案
由于您只是在两个可能的选项之间切换,我认为IF
会比CASE
.
ORDER BY IF(c.isonsale, c.saleprice, c.regularprice)
如果商品在售,该IF
表达式将返回销售价格,如果不是,则返回正常价格。
推荐阅读
- vuex - 可以在 Vuex 状态下使用 Javascript 类对象吗?
- python - @property:AttributeError:无法设置属性
- javascript - 为什么即使我们在使用 new 关键字创建对象时手动将其更改为另一个构造函数,也会执行 A 对象的构造函数?
- c# - C# 性能 - 线性数组访问与随机访问
- java - java.util.ConcurrentModificationException -- 执行 IO 操作时的错误(不是列表)
- command-line-interface - 如何使 PMD 不计算带有括号的行作为代码行?
- vue.js - vue-cli 如何支持可选的 SCSS,例如主题?
- xml - Add IntervalSeconds Element to Script Based Monitor via MP Author
- eloquent - 使用 Eloquent Query Builder 查询
- c# - 单行印刷系列