【发布时间】:2017-07-10 14:43:32
【问题描述】:
我正在尝试根据订单表中的这些条件进行查询,
// This is not an actual query
SELECT *
IF (store_id = 3) THEN ORDER BY WEIGHT DESC,
ELSEIF (STORE_ID = 7) THEN ORDER BY WEIGHT DESC
ELSEIF ORDER BY WEIGHT = DESC
ELSEIF (EQUAL WEIGHT) ORDER BY ORDER_DATE DESC
ELSEIF (EQUAL WEIGHT AND EQUAL ORDER_DATE) ORDER BY STORE_ID DESC
ELSEIF (EQUAL WEIGHT AND EQUAL ORDER_DATE AND EQUAL STORE_ID) ORDER BY
SHIPPING_METHOD DESC
FROM TABLE orders WHERE carrier_name = 'XXX'
这是我所得到的,
//Actual query
SELECT id,store_id,weight
FROM orders
WHERE carrier_name = 'XXX'
ORDER BY
IF(store_id = 3,weight,'')DESC,
IF(store_id = 3,order_date,'')DESC,
IF(store_id = 3,store_id,'')DESC,
IF(store_id = 3,shipping_method,'')DESC,
IF(store_id = 7,weight,'')DESC,
IF(store_id = 7,order_date,'')DESC,
IF(store_id = 7,store_id,'')DESC,
IF(store_id = 7,shipping_method,'')DESC,
IF(TRUE,weight,'')DESC,
IF(TRUE,order_date,'')DESC,
IF(TRUE,store_id,'')DESC,
IF(TRUE,shipping_method,'')DESC
得到的结果是
我不确定为什么 53.39 和 30.35 没有排序。我究竟做错了什么? 请建议是否有更好的方法来实现这一点。
这是需要的结果,
【问题讨论】:
-
您将数字隐式转换为字符串(我认为)。为什么不使用 0 或 -10000 而不是 ''
-
无论逻辑如何,您的第二个查询始终使用降序。那么这些检查有什么意义呢?
-
使用
CASE语句代替 If 条件。看到这个stackoverflow.com/a/2258402/5002793 -
@TimBiegeleisen 我必须先排序所有 store_id 3,然后是 store_id 7,然后是所有其他 store_id 。这就是我插入条件的原因。
-
我再次更新了我的答案,以考虑到这一点。
标签: mysql