是否可以基于条件以两种不同的方式对SELECT查询的结果进行排序?

时间:2011-01-26 03:09:23

标签: sql mysql sql-order-by mysql-error-1064

以下是无效的语法,但我正在试着说:

  SELECT *  
    FROM categories 
ORDER BY menu_order ASC WHERE parent = '1' || IF parent = '0' ORDER BY id ASC;

是否可以根据查询中的条件以不同方式排序选择查询的结果?

以防万一我不清楚,我正在尝试按菜单顺序排序父母的类别和按身份排序没有父母的类别。

修改

所以这是数据库的样子:

id | name    | parent | menu_order

==================================

1  | Apparel | 0      | 2
2  | Sports  | 0      | 4
3  | Hats    | 1      | 5
4  | Weights | 1      | 3
5  | Lights  | 0      | 1

查询的结果集应为:

Apparel
Sports
Lights

Weights
Hats

4 个答案:

答案 0 :(得分:3)

按顺序使用案例,如下所示:

SELECT * FROM categories
ORDER BY
CASE WHEN parent = '1'
    THEN menu_order
    ELSE id
END;

答案 1 :(得分:1)

如果您将数据更改为

insert categories values (1 , 'Apparel ', 0 , 1)
insert categories values (2 , 'Sports  ', 0 , 5)
insert categories values (3 , 'Hats    ', 1 , 3)
insert categories values (4 , 'Weights ', 1 , 4)
insert categories values (5 , 'Lights  ', 0 , 2)

输出using the accepted solution显示为

1   Apparel     0   1
2   Sports      0   5
3   Hats        1   3
4   Weights     1   4
5   Lights      0   2

这就是你追求的吗? Gerrat想要问的是,这就是你所追求的吗?

1   Apparel     0   1
2   Sports      0   5
5   Lights      0   2
-------------------------------- << line for emphasis
3   Hats        1   3
4   Weights     1   4

即。所有未提供的那些,在所有的父级之前,由下面的查询产生

SELECT *
FROM categories
ORDER BY parent,
    CASE
    WHEN parent = '1'
    THEN menu_order
    ELSE id
END;

答案 2 :(得分:0)

我处理此类功能请求的方法是根据需要构建查询的这一部分。我不确定你的程序逻辑是什么样的,所以很难具体说。例如,使用ibatis,可以根据参数选择要包含的子句。

答案 3 :(得分:0)

您的select子句可以定义自定义'order_by'字段,您可以按此顺序。