Выберите запрос, но покажите результат из записи № 3 - PullRequest
2 голосов
/ 12 декабря 2011

Я видел этот вопрос: Выберите запрос, но покажите результат из записи № 3

Таблица

|id|   foo   |    bar   |
-------------------------
|1 |   aaa   |    123   |
|2 |   bbb   |    234   |
|3 |   ccc   |    345   |
|4 |   ddd   |    456   |

на основе указанной выше ссылки. Я используюзапрос

SELECT * 
FROM Table 
ORDER BY (id = 3) DESC

и результат

|id|   foo   |    bar   |
-------------------------
|3 |   ccc   |    345   |
|1 |   aaa   |    123   |
|2 |   bbb   |    234   |
|4 |   ddd   |    456   |

Так что мой вопрос, есть ли способ показать результат, начиная с записи номер 3, затем 4, затем 1 и последнийтакое запись № 2?Таким образом, результат может быть показан следующим образом:

|id|   foo   |    bar   |
-------------------------
|3 |   ccc   |    345   |
|4 |   ddd   |    456   |
|1 |   aaa   |    123   |
|2 |   bbb   |    234   |

Мой пример выше - только модель, моя цель - как отсортировать результат из выбранной записи по максимальной записи, а затем перейти к первой записи.Если я выберу запись № 3, то получится

3,4,5,...,max,1,2

Возможно ли это?

Ответы [ 3 ]

1 голос
/ 12 декабря 2011

Для форсирования определенного ордера вам необходимо использовать CASE:

ORDER BY CASE WHEN id = 3 THEN 1
              WHEN id = 4 THEN 2
              WHEN id = 1 then 3
              WHEN id = 2 then 4
              ELSE 5 END ASC
1 голос
/ 12 декабря 2011

Я думаю, что это сработает:

ORDER BY (id = 3) OR (id = 4) DESC, id ASC

ETA: Судя по вашему комментарию, вам действительно нужно, чтобы 1 & 2 отображали ПОСЛЕДНЮЮ.Это будет выглядеть так:

ORDER BY id <= 2, id
0 голосов
/ 13 декабря 2011

Это может быть не совсем идеально, поскольку требует двух запросов, но оно полностью определено и не использует логические значения для упорядочения:

(SELECT * 
 FROM Table 
 WHERE id >= 3
 ORDER BY id ASC)
UNION
(SELECT *
 FROM Table
 WHERE id < 3
 ORDER BY id ASC)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...