Можно ли отсортировать результаты запроса SELECT двумя различными способами на основе условия? - PullRequest
1 голос
/ 26 января 2011

Следующий синтаксис недопустим, но это то, что я пытаюсь сказать по существу:

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

Можно ли по-разному упорядочить результаты запроса на выборку в зависимости от условия в запросе?

На случай, если мне неясно, я пытаюсь упорядочить категории с родителями по порядку меню и категории без родителей по идентификатору.

EDIT

Итак, как выглядит база данных:

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 ]

3 голосов
/ 26 января 2011

вариант использования в порядке, как это:

SELECT * FROM categories
ORDER BY
CASE WHEN parent = '1'
    THEN menu_order
    ELSE id
END;
1 голос
/ 26 января 2011

Если вы изменили свои данные на

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

Это то, что вы ищете? Джеррат пытается спросить: это то, что ты ищешь?

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;
0 голосов
/ 26 января 2011

Ваше предложение select может определять пользовательское поле order_by, и вы можете упорядочить по нему.

0 голосов
/ 26 января 2011

Способ обработки запроса такого типа заключается в том, чтобы эта часть запроса строилась по требованию.Я не уверен, как выглядит логика вашей программы, поэтому сложно сказать конкретно.Используя ibatis, например, можно выбрать, какое предложение включить, основываясь на параметре.

...