我有一个包含两列的表格,如下所示:
>价格(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`
如果不为空,它将首先通过折扣订购,然后再按价格订购.对于那些具有相同折扣的商品,它将按价格排序,然后是标题.
注意:根据您想要的结果,您可能希望按价格删除其他订单.