我有一個消息表看起來像這樣:PostgreSQL的收件箱中查詢
Messages
+-----+------------+-------------+--------------+
| id | sender_id | receiver_id | created_at |
+-----------------------------------------------+
| 1 | 1 | 2 | 1/1/2013 |
| 2 | 1 | 2 | 1/1/2013 |
| 3 | 2 | 1 | 1/2/2013 |
| 4 | 3 | 2 | 1/2/2013 |
| 5 | 3 | 2 | 1/3/2013 |
| 6 | 5 | 4 | 1/4/2013 |
+-----------------------------------------------+
凡有「線」是一個給定的SENDER_ID和receiver_id我想查詢返回最近10之間的一組消息最近10個線程的消息其中sender_id或receiver_id是給定的ID。
預期輸出,其中給定的user_id是5:
+-----+------------+-------------+--------------+
| id | sender_id | receiver_id | created_at |
+-----------------------------------------------+
| 1 | 5 | 2 | 1/4/2013 |
| 2 | 5 | 2 | 1/4/2013 |
| 3 | 2 | 5 | 1/4/2013 |
| 4 | 3 | 5 | 1/4/2013 |
| 5 | 5 | 2 | 1/3/2013 |
| 6 | 5 | 4 | 1/3/2013 |
+-----------------------------------------------+
高達之間,10條消息的限制,例如,用戶5和2(上面有4)和10個線程的限制(上面有是3)。
我一直在試圖用這種查詢使用子查詢,但沒有設法得到不同線程數的第二個限制。
SELECT * FROM (SELECT DISTINCT ON (sender_id, receiver_id) messages.*
FROM messages
WHERE (receiver_id = 5 OR sender_id = 5) ORDER BY sender_id, receiver_id,
created_at DESC)
q ORDER BY created_at DESC
LIMIT 10 OFFSET 0;
我正在考慮創建包含的thread_id場這將是SENDER_ID + receiver_id然後剛剛加盟的消息的串聯一個新的線程表,但我有一個鬼鬼祟祟的懷疑,它應該是可行的只有一個表。
您可以根據上面顯示的示例數據顯示您嘗試過的查詢和預期的輸出嗎? – bonCodigo
要明確你要求每個線程1條消息(最多返回10行)或每條線程10條消息(最多返回100行)。 –
@couling我要求每個線程10條消息(最多返回100行) – johnnymire