PostgreSQL JOIN con tipo de matriz con order de elementos de matriz, ¿cómo implementarlo?

Tengo dos tablas en la database:

CREATE TABLE items( id SERIAL PRIMARY KEY, ... some other fields ); 

Esta tabla contiene una fila de datos con ID único.

 CREATE TABLE some_chosen_data_in_order( id SERIAL PRIMARY KEY, id_items INTEGER[], 

);

Esta tabla contiene un campo de tipo de matriz. Cada fila contiene valores de ID de items tabla en un order específico. Por ejemplo: {2,4,233,5} .

Ahora, quiero get datos de los items tabla para la fila elegida de la tabla some_chosen_data_in_order con el fin de los elementos en el tipo de matriz.

Mi bash fue UNIRSE:

 SELECT I.* FROM items AS I JOIN some_chosen_data_in_order AS S ON I.id = ANY(S.id_items) WHERE S.id = ? 

El segundo bash fue subconsulta como:

 SELECT I.* FROM items AS I WHERE I.id = ANY (ARRAY[SELECT S.id_items FROM some_chosen_data_in_order WHERE id = ?]) 

Pero ninguno de ellos guarda los ID en el mismo order que en el campo de matriz. ¿Podrían ayudarme, cómo get los datos de la tabla de items con el order de los ID de some_chosen_data_in_order tabla some_chosen_data_in_order para una fila específica?

 SELECT t.* FROM unnest(ARRAY[1,2,3,2,3,5]) item_id LEFT JOIN items t on t.id=item_id 

La consulta anterior selecciona elementos de la tabla de items con identificadores: 1,2,3,2,3,5 en ese order. ¿Es eso lo que quieres decir? 🙂

Probablemente la normalización de su table sea el mejor consejo que pueda darle.

El module de contribución int_array tiene una function idx que le dará la position de índice de int en la matriz. También hay una function idx en la wiki de fragments que funciona para matrices de cualquier tipo de datos.

 SELECT i.*, idx(id_items, i.id) AS idx FROM some_chosen_data_in_order s JOIN items i ON i.id = ANY(s.id_items) ORDER BY idx(id_items, i.id) 
 SELECT I.* FROM items AS I WHERE I.id IN (SELECT UNNEST(id_items) FROM FROM some_chosen_data_in_order (ARRAY[SELECT S.id_items FROM some_chosen_data_in_order WHERE id = ?])