ORDER BY дискретных значений текстового столбца на [My] SQL [ite] - PullRequest
1 голос
/ 08 ноября 2011

Я хотел бы отсортировать строки в таблице на основе произвольного порядка ограниченного набора значений текстового (или перечислимого) столбца.Например, если столбец «Классы» может иметь значения A, B, C, D, я хотел бы иметь возможность сортировать строки по A> C> B> D или по какой-либо другой комбинации, а не только по алфавиту или породной порядок перечисления.Это вообще возможно?

В идеале, я хотел бы, чтобы решение работало на SQLite, но было бы полезно и MySQL.Большое спасибо!

Ответы [ 3 ]

3 голосов
/ 08 ноября 2011
ORDER BY field(column, 'A', 'C', 'B', 'D')

ПОЛЕ функция в MySQL документы

1 голос
/ 08 ноября 2011

Если mySQL и sqlite отказываются от использования CASE в предложениях ORDER BY (MSSQL делает, и я не вижу причин, по которым другие системы этого не делают), вы можете использовать что-то вроде:

ORDER BY CASE
         WHEN classes ='A' THEN 1
         WHEN classes ='C' THEN 2
         WHEN classes ='B' THEN 3
         WHEN classes ='D' THEN 4
         ELSE 5
         END CASE

Если столбецможет содержать более одного параметра в любом конкретном порядке, который вы также можете сделать:

ORDER BY CASE
         WHEN classes LIKE '%A%' THEN 1
         WHEN classes LIKE '%C%' THEN 2
         WHEN classes LIKE '%B%' THEN 3
         WHEN classes LIKE '%D%' THEN 4
         ELSE 5
         END CASE

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

0 голосов
/ 08 ноября 2011

Еще один вариант - добавить новую (временную?) Таблицу, такую ​​как

class | rank
A     | 1
B     | 2
C     | 3
D     | 4

Затем вы можете присоединиться к таблице по столбцу class и упорядочить по rank.

...