2013-08-13 1 views
3

У меня есть заказ заказ должен нравится:SQL упорядоченность запрос в произвольном порядке

normal ordering | custom ordering 
     1   |  7 
     2   |  6 
     3   |  5 
     4   |  4 
     5   |  3 
     6   |  2 
     7   |  8 
     .   |  . 
     .   |  . 
     .   |  . 
     .   |  . 
     .   |  N 
     N   |  1 

Я думал об использовании UNION комбинировать 3 различных запросов на выборку с помощью ORDER BY и LIMIT. Однако я не могу этого сделать, потому что UNION должен использоваться доORDER BY и LIMIT.

Как я могу сделать выбор (или выбор) для достижения заказного заказа выше?

Другим обходным решением может помочь просто сделать 1-й рекорд, возвращенный в этом запросе на выбор последней записи, но как? Спасибо за вашу помощь!

ответ

2

Попробуйте это:

SELECT x 
FROM t1 
ORDER BY 
    CASE 
     WHEN x = 1 THEN 100000001 
     WHEN x between 2 and 7 THEN 7 - x 
     WHEN x between 8 and (SELECT max(x) FROM t1) - 1 THEN x 
     ELSE 100000000 
    END 

100000000 Константы должны быть greather чем N.
Вот это simple demo

+0

Спасибо за вашу помощь. ИМХО, используя жестко закодированный «100000001», может вызвать проблемы, если записи будут больше и больше в будущем? –

+0

Как насчет запроса DISTINCT? – ErTR

2

Добавить новый стол CustomSeq с двумя колонками, Value и Sequence. В этой таблице вы можете сохранить значения и их собственный заказ. затем присоединитесь к этой таблице и закажите ее колонкой Sequence.