php - SQL - 按 case 或 if 语句编写 order

标签 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 字段按最新日期对它们进行排序上面列出了。

按特定变量对项目进行排序

我希望能够利用按情况排序,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/

相关文章:

php - jQuery 点击事件在 php 列表中不起作用

mysql - 支持多语言的数据库的理想编码设置是什么?

php/mysql动态菜单

去除标签的 PHP 函数,白名单标签和属性列表除外

php - 为时间序列数据MySQL创建小时组

php - 从结果集中选择最新记录(mysql、php)

php - Sql如何从一个表中选择另一个表中不存在的

php - PDO,准备使用

php - 为什么以下 mySQL 查询失败?

php - 如何验证 API 的用户身份