Порядок сортировки SQL по порядку, указанному в запросе - PullRequest
1 голос
/ 03 августа 2010

Скажем, у меня есть запрос "выбрать * из предложений, где id в (0,2,5,1,3)", и я на самом деле хочу, чтобы строки возвращались в том же порядке, в котором они указаны в предложении where.Порядок идентификаторов будет меняться от запроса к запросу, а порядок в нем отсутствует.

Я знаю, что можно изменить модель данных , создать временные таблицы и т. Д. .Но поверьте мне, что эти типы решений не будут работать в моей ситуации.Я также не могу изменить порядок объектов результата в коде моего приложения.

Я также знаю, что разные механизмы баз данных сортируют вещи по-разному, в некоторых ситуациях нет никаких гарантий, бла-бла-бла.Я просто хочу нет, это возможно?

Я буду использовать MySQL или SQL Server, если это поможет:)

Ответы [ 2 ]

6 голосов
/ 03 августа 2010

В MySQL вы можете использовать FIND_IN_SET :

ORDER BY FIND_IN_SET(id, '0,2,5,1,3')

Наиболее переносимым способом заказа будет использование выражения CASE:

ORDER BY CASE id
           WHEN 0 THEN 1
           WHEN 2 THEN 2
           WHEN 5 THEN 3
           WHEN 1 THEN 4
           WHEN 3 THEN 5
         END
5 голосов
/ 03 августа 2010
Select ..
From Clauses
Where Id In(0,2,5,1,3)
Order By Case Id
                When 0 Then 1
                When 2 Then 2
                When 5 Then 3
                When 1 Then 4
                When 3 Then 5
                ...
                End
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...