Я хочу упорядочить вывод 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, но не хочу его использовать, так как его не так просто обновить.
Спасибо
Используйте 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 Вы всегда можете использовать математические приемы, чтобы преобразовать 0
в большое число. Однако вычислительные затраты на вычисление выражения FIELD(spec_type, 'value 1', 'value 2')
дважды незначительны.
Хорошо, пока это работает, я помещаю все в переменную, поэтому мне не нужно писать одни и те же значения дважды.
Нет ли более простого способа отсортировать значения? повторение одного и того же «массива» в запросе кажется решением «все, что работает». не обижайся. Я ценю вашу помощь.