2017-01-18 42 views
1

說我有兩個表:的帖子嵌入。帖子中的每個帖子可以具有與其相關聯的嵌入的數量,其具體順序必須保留。該查詢似乎工作,產生如下圖所示爲«Post_embeds»結果:在Postgres中做JOIN時保留數組中項目的順序

SELECT p.id AS pid, array_agg(e.code) AS code 
    FROM posts p, unnest(p.embeds) embed_id 
    JOIN embeds e ON e.id = embed_id 
GROUP BY p.id; 

Tables

正如你所看到的,順序嵌入被保留。但後來我創建的視圖post_embeds,並試圖查詢這個觀點:

SELECT * FROM post_embeds WHERE pid=1 

嵌入視頻的順序不見了。我懷疑我的第一個疑問不能保證順序,畢竟它只是巧合。

如何正確查詢與相關嵌入的一些帖子,保存順序?

+1

只是因爲數據被張貼圖片沒有文字,我不給予好評此。 –

+1

'WITH ORDINALITY' *可以解決你的問題,但是如何修復你的模式呢?你應該有一個聯結表,比如'post_x_embed(post_id,embed_id,order)',你甚至可以使用外鍵...... – pozs

回答

6

使用unnest() WITH ORDINALITY和聚集的序數:

SELECT p.id AS pid, array_agg(e.code ORDER BY ordinality) AS code 
    FROM posts p, unnest(p.embeds) WITH ORDINALITY AS u(embed_id, ordinality) 
    JOIN embeds e ON e.id = embed_id 
GROUP BY p.id;