2016-03-15 2 views
0

У меня есть таблица с массивами, с которыми я хочу сопоставлять. Согласование работ с использованием && оператора:Фильтр и порядок PostgreSQL по массиву

SELECT * FROM table WHERE data && ARRAY['foo','bar']; 
id | data 
---+---------- 
1 | {foo} 
2 | {bar} 
6 | {bar,foo} 

Следующая вещь, которую я хочу сейчас, также отсортировать их в порядке, они в этом массиве, что-то вроде:

SELECT * FROM table WHERE data && ARRAY['foo','bar'] ORDER BY data && ARRAY['foo','bar']; 
id | data 
---+---------- 
1 | {foo} 
6 | {bar,foo} 
2 | {bar} 

это возможно ?

+0

Возможно, что-то вроде 'ORDER BY position ('foo' в array_to_string (data, ',')), position ('bar' в array_to_string (data, ','))'. – JimmyB

+0

@Patrick 'data' является столбцом' TEXT [] '. –

+0

@HannoBinder выглядит как решение, но что, если я не знаю длины массива, с которым я сравниваюсь. В моем случае я выбираю эти данные сначала из другого столбца/таблицы. –

ответ

0

это, вероятно, не лучший режим, но он должен работать.

SELECT ... ORDER BY данных & & ARRAY [ 'бар'], данные & & ARRAY [ 'Foo'];

или ...

ORDER BY 'бар' = ANY (данные) по убыванию, 'Foo' = ANY (данные) по убыванию;

Смежные вопросы