Ho una tabella I messaggi che assomiglia a questo:PostgreSQL interrogazione posta in arrivo
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 |
+-----------------------------------------------+
Qualora un 'filo' è un gruppo di messaggi tra un dato sender_id e receiver_id voglio una query per restituire il più recente 10 messaggi per i 10 thread più recenti in cui il sender_id o il receiver_id è un dato id.
uscita prevista se proposta 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 |
+-----------------------------------------------+
fino ad un limite di 10 messaggi tra, per esempio, l'utente 5 e 2 (sopra ci sono 4) e un limite di 10 fili (sopra ci sono 3).
Ho provato con questo tipo di query utilizzando una sottoquery ma non sono riuscito a ottenere il secondo limite sul numero di thread distinti.
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;
sto considerando la creazione di una nuova tabella contenente un campo Discussione ID_Thread che sarebbe la concatenazione di sender_id + receiver_id e poi basta entrare in messaggi ma ho un sospetto subdolo che dovrebbe essere fattibile con un solo tavolo .
Puoi mostrare la query che hai provato e l'output previsto in base ai dati di esempio che hai mostrato sopra? – bonCodigo
Giusto per essere chiari stai chiedendo 1 messaggio per thread (restituendo al massimo 10 righe) o 10 messaggi per thread (restituendo al massimo 100 righe). –
@couling Sto chiedendo 10 messaggi per thread (restituendo al massimo 100 righe) – johnnymire