LINUX.ORG.RU

Сортировка в запросе по массиву

 


0

1

Есть массив значений [4,6,5,1] некоторого поля.

Получаем записи со значениями из этого массива. [code] select * from T where Filed1=ANY(ARRAY[4,6,5,1]) [/code]

Вопрос:

Нужно чтобы записи были в том порядке в котором значения в массиве, то есть Запись1 со значением 4 Запись2 со значением 6 Запись3 со значение 5 Запись4 со значением 1

Можно использовать UNION c каждым значением по отдельности

[code] select * from T where Filed1=4 …. union select * from T where Filed1=1 [/code]

Вопрос: Можно ли добиться такой сортировки без использования UNION(UNION ALL), может быть ORDER BY



Последнее исправление: polin11 (всего исправлений: 3)

Добавь в селект array_position и ORDER BY.

SELECT *, array_position(ARRAY[4,6,5,1], Filed1) AS position
FROM T
WHERE Filed1=ANY(ARRAY[4,6,5,1])
ORDER BY position;

Но, наверное, поле для сортировки можно добавить в таблицу, чтоб не мучиться потом?

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 3)

ORDER BY

ORDER BY CASE Field1 WHEN 4 THEN 1 WHEN 6 THEN 2 … END

no-such-file ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.