mysql-按两列进行SQL排序,忽略null

我有一个包含两列的表格,如下所示:

>价格(varchar)
>折扣(varchar)

这两个持有我数据库中所有产品的价格和折扣.当用户查看产品时,我有多种可用的排序模式,其中一种是按价格排序:从低到高.为了做到这一点,我有以下代码:

$stmt = $link->prepare("SELECT ... ORDER BY `discount` ASC, `price` ASC, `title` ASC");

这对于定义了折扣的所有行都适用,但是在折扣为空的行中,无论价格多少,它们都排在其他行的上方.

例如:

id|price|discount
-----------------
 1|20   |10
 2|25   |10
 3|15   |
 4|15   |

将按顺序回显:

3, 4, 1, 2

当折扣没有价值时,如何重写此语句以按价格排序?

解决方法:

您可以为此使用COALESCE:

SELECT ... 
ORDER BY COALESCE(`discount`, `price`), `price`, `title`

如果不为空,它将首先通过折扣订购,然后再按价格订购.对于那些具有相同折扣的商品,它将按价格排序,然后是标题.

注意:根据您想要的结果,您可能希望按价格删除其他订单.

上一篇:linux排序,选择最后一行,管道到新文件


下一篇:c#-按两个具有不同类型的字段对不同型号的列表进行排序