2015-05-15 32 views
1

在消息傳遞系統中,我想記錄一條新消息。 由於技術原因我的系統中有兩個表格。一個引用對話,另一個引用鏈接到這些對話的消息。多條INSERT條件和SELECT返回一個請求

conversation 

conversation_id 
--------------- 
      3 
      4 
      8 
      12 

(*)conversation_id是一個序列號。

message 

message_id | conversation_id |  timestamp  | sender_id | receiver_id |   message   
------------+-----------------+---------------------+-----------+-------------+------------------------------- 
     12 |    3 | 2015-05-13 15:46:36 |   1 |   2 | Hello Bob! How are you doing? 
     13 |    3 | 2015-05-13 15:55:10 |   2 |   1 | I'm fine, and you? 

當系統記錄了新的消息我想如果不是已經做到了自動創建相應的談話。 我希望聲明可以返回完整的對話(意味着所有與剛剛添加的對象相關的消息)。

因此,系統會插入對話(如果尚未創建),然後插入消息並最終返回整個對話。所以我只是想提供這個元組postgreSQL (時間戳,sender_id,receiver_id,消息),讓它處理對話部分(創建或選擇)。

我想找回完整的對話就像如果我做:

SELECT * FROM message WHERE conversation_id="xxxx" 

是否有可能做的所有這些操作都在一個單獨的SQL語句?

我發現我們可以使用與INSERT和SELECT操作相關的CTE,但我不知道如何表達我的具體請求。

+0

必須通過CTE嗎?你打開PL/pgsql,規則還是觸發器? –

+0

我對任何解決方案都開放。 :-)但是,更簡單,更好......當然。 – Nitseg

回答

0

你可以創建一個PL/pgSQL存儲過程,它接受你的元組作爲參數,檢查你的表,並做任何插入的保證。另外,你也許可以使用rulestriggers甚至CTE來獲得更加光滑的東西,但我不夠流暢,無法描述如何。

+0

我去了一個存儲過程。這是行得通的。我將發佈解決方案以解決我的具體問題,因爲我在網絡上沒有發現任何類似的內容。 – Nitseg