В системе обмена сообщениями я хочу записать новое сообщение. По техническим причинам В моей системе есть две таблицы. Один ссылается на разговоры, а другой ссылается на сообщения, связанные с этими беседами.Multi INSERT с условием и возвратом SELECT по одному запросу
conversation
conversation_id
---------------
3
4
8
12
(*) convers_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 (timestamp, sender_id, receiver_id, message) и позволить ему обрабатывать часть разговора (создание или выбор).
И я хочу, чтобы вернуться в полный разговор, как если бы я делал: с
SELECT * FROM message WHERE conversation_id="xxxx"
Можно ли делать все эти операции в одном заявлении SQL?
Я узнал, что мы можем использовать CTE, связанные с операциями INSERT и SELECT, но я не знаю, как сформулировать свой конкретный запрос.
Должно ли это быть через CTE? Вы открыты для PL/pgsql, правила или триггера? –
Я открыт для любого решения. :-) Но чем проще, тем лучше ... конечно. – Nitseg