Ответ 1
Попробуйте использовать это:
select * from table
order by FIELD(Code, 'Health', 'Phone', 'Freeze', 'Hot')
Я хочу сделать выбор в таблице и заказать результаты по определенному ключевому слову или списку ключевых слов. Например, у меня есть таблица вроде:
ID Code
1 Health
2 Freeze
3 Phone
4 Phone
5 Health
6 Hot
а не просто сделать Order By asc/desc
, я хотел бы order by Health, Phone, Freeze, Hot
. Возможно ли это?
Попробуйте использовать это:
select * from table
order by FIELD(Code, 'Health', 'Phone', 'Freeze', 'Hot')
Вы можете присоединиться к таблице "Ключевые слова" и включить столбец последовательностей и 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
Надеюсь, это даст вам эту идею.
Вот ужасный взлом:
select * from table
order by (
case Code
when 'Health' then 0
when 'Phone' then 1
when 'Freeze' then 2
when 'Hot' then 3
end
)
В настоящее время MySQL имеет функцию под названием find_in_set()
Используйте его следующим образом:
select * from table
order by find_in_set(Code,'Health','Phone','Freeze','Hot')
Пара вариантов:
Добавить столбец OrderCode с числовыми желаемый порядок
Добавьте таблицу с FK в этот идентификатор таблицы и OrderCode
Разве это просто один 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.
Да присоедините свои результаты к таблице кодов, а затем закажите code.CodeOrder
EDIT: использование таблицы кодов...
Создайте отдельную таблицу кодов (CodeId, Code, CodeOrder) и присоединитесь к ней и закажите CodeOrder. Это лучше, чем делать заказ с помощью (case...) взлома, поскольку вы можете легко изменить коды и заказы.
Привет, это запрос 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