Подтвердить что ты не робот

Заказ SQL по списку строк?

Я хочу сделать выбор в таблице и заказать результаты по определенному ключевому слову или списку ключевых слов. Например, у меня есть таблица вроде:

ID  Code
1   Health
2   Freeze
3   Phone
4   Phone
5   Health
6   Hot

а не просто сделать Order By asc/desc, я хотел бы order by Health, Phone, Freeze, Hot. Возможно ли это?

4b9b3361

Ответ 1

Попробуйте использовать это:

select * from table 
order by FIELD(Code, 'Health', 'Phone', 'Freeze', 'Hot')

Ответ 2

Вы можете присоединиться к таблице "Ключевые слова" и включить столбец последовательностей и ORDER BY Keyword.Sequence.

Пример таблицы ваших ключевых слов выглядит следующим образом:

ID  Code     Sequence
1   Health   1 
2   Freeze   3
3   Phone    2
4   Hot      4

Затем вы можете присоединиться.

SELECT *
FROM   MyTable INNER JOIN
          Keywords ON Keywords.ID = MyTable.KeywordID
ORDER BY Keywords.Sequence

Надеюсь, это даст вам эту идею.

Ответ 3

Вот ужасный взлом:

select * from table
order by (
     case Code 
     when 'Health' then 0 
     when 'Phone' then 1
     when 'Freeze' then 2
     when 'Hot' then 3
     end
)

Ответ 4

В настоящее время MySQL имеет функцию под названием find_in_set()

Используйте его следующим образом:

select * from table 
order by find_in_set(Code,'Health','Phone','Freeze','Hot')

Ответ 5

Пара вариантов:

  • Добавить столбец OrderCode с числовыми желаемый порядок

  • Добавьте таблицу с FK в этот идентификатор таблицы и OrderCode

Ответ 6

Разве это просто один ORDER BY или что-то, что вы собираетесь делать часто и на большее количество значений, чем указано здесь?

Заказ, который вы задали, произволен, поэтому нужно указать идентификатор для достижения желаемого

SELECT 
    ID,
    Code,
    CASE Code
        WHEN 'Health' THEN 1
        WHEN 'Phone' THEN 2
        WHEN 'Freeze' THEN 3
        WHEN 'Hot' THEN 4
    END As OrderBy
FROM Table
ORDER BY 
    OrderBy

или

SELECT 
    ID,
    Code
FROM Table
ORDER BY 
    CASE Code
        WHEN 'Health' THEN 1
        WHEN 'Phone' THEN 2
        WHEN 'Freeze' THEN 3
        WHEN 'Hot' THEN 4
    END

(Я не знаком с MySQL, но выше было бы работать в SQL Server. Синтаксис для MySQL не будет слишком разным)

Если вы, вероятно, захотите сделать это часто, создайте столбец OrderBy в таблице или создайте таблицу OrderBy со ссылкой FK к этой таблице и укажите в ней числовое число OrderBy.

Ответ 7

Да присоедините свои результаты к таблице кодов, а затем закажите code.CodeOrder

EDIT: использование таблицы кодов...

Создайте отдельную таблицу кодов (CodeId, Code, CodeOrder) и присоединитесь к ней и закажите CodeOrder. Это лучше, чем делать заказ с помощью (case...) взлома, поскольку вы можете легко изменить коды и заказы.

Ответ 8

Привет, это запрос SQL Server, но я уверен, что вы тоже можете это сделать в MySQL:

SELECT ID,  Code
FROM x
ORDER BY 
     CASE Code WHEN 'Health' THEN 1
               WHEN 'Phone' THEN 2
               WHEN 'Freeze' THEN 4
               WHEN 'Hot' THEN 5
     ELSE 6 END ASC
     , Code ASC