Порядок mysql по порядку полей не соответствует моим ожиданиям

Я хочу упорядочить вывод SQL с помощью аргумента FIELD, но когда я это делаю, он сначала выдает результаты, которые мне не нужны, а затем сначала выдает результаты, которые мне нужны. Над результатами он сначала выплевывает. Если в этом есть смысл ;)

Как мне сначала выплюнуть определенные значения, а затем остальные?

SQL-запрос:

SELECT * FROM `product_specs` WHERE itemid = '$id' ORDER BY FIELD(spec_type, 'value 1', 'value 2');

Текущий выход:

Value 5 
Value 6

Value 1
Value 2

Желаемый результат:

Value 1
Value 2 

Value 5
Value 6

Я знаю об аргументе case, но не хочу его использовать, так как его не так просто обновить.

Спасибо

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
0
19
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте CASE в предложении ORDER BY, чтобы преобразовать 0 (не найдено) в 999 (после всех значений), как в:

SELECT * 
FROM `product_specs` 
WHERE itemid = '$id' 
ORDER BY case 
  when FIELD(spec_type, 'value 1', 'value 2') = 0 then 999
  else FIELD(spec_type, 'value 1', 'value 2') end

Нет ли более простого способа отсортировать значения? повторение одного и того же «массива» в запросе кажется решением «все, что работает». не обижайся. Я ценю вашу помощь.

Niels 08.04.2019 22:22

@Niels Вы всегда можете использовать математические приемы, чтобы преобразовать 0 в большое число. Однако вычислительные затраты на вычисление выражения FIELD(spec_type, 'value 1', 'value 2') дважды незначительны.

The Impaler 08.04.2019 22:25

Хорошо, пока это работает, я помещаю все в переменную, поэтому мне не нужно писать одни и те же значения дважды.

Niels 08.04.2019 22:31

Другие вопросы по теме