[ ppavlovic @ 19.06.2005. 16:16 ] @
Pravim neki sistem za dopisivanje i imam mali problem...
Primer tabele je:

Code:

message_id | sender_id | recipient_id | subject |
1  | 1 | 2 | neki subject
2  | 1 | 2 | neki subject
3  | 1 | 3 | neki subject
4  | 1 | 3 | neki subject
5  | 1 | 3 | neki subject
6  | 2 | 1 | neki subject
7  | 2 | 1 | neki subject
8  | 3 | 1 | neki subject
9  | 3 | 1 | neki subject
10 | 3 | 2 | neki subject


U tabeli sender_id je ID# korisnika koji je poslao poruku, a recipient_id je ID# korisnika koji je primio poruku. message_id i subject su nebitni za razmatranje problema.

Treba mi upit koji ce gledano iz perspektive sender_id=1 dati sledece rezultate:
Code:

recipient_id | broj_medjusobnih_poruka
2 | 4
3 | 5

a iz perspektive sender_id=2
Code:

recipient_id | broj_medjusobnih_poruka
1 | 4
3 | 1


U prevodu, uz svaki recipient_id treba da stoji ukupan broj poruka koji je razmenjen izmedju dva korisnika. Da ga s' oprostenjem ne tupim mnogo, rezultat treba da bude isti kao na GMail-u gde pored svakog e-maila stoji ukupan broj medjusobno razmenjenih poruka.

Hvala.
[ Dejan Topalovic @ 19.06.2005. 16:41 ] @
Code:

SELECT recipient_id, COUNT(*) AS Broj_razmijenjenih_poruka
FROM tabela
WHERE sender_id = 1
GROUP BY sender_id, recipient_id;
[ ppavlovic @ 19.06.2005. 19:28 ] @
Hvala na pomoci, ali mi gornji upit vraca samo koliko je poruka korisnik poslao drugim korisnicima, ali ne uzima u obzir broj primljenih poruka od tih korisnika. Elem, malo sam 'izmajmunisao' resenje i dobio sledeci upit koji resava problem:

Code:

SELECT m.recipient_id, sum(m.num_messages) as num_messages FROM
(
SELECT 1, recipient_id, sender_id, COUNT(*) AS num_messages
FROM messages
WHERE sender_id = 1
GROUP BY sender_id, recipient_id
UNION
SELECT 2, sender_id, recipient_id, COUNT(*) AS num_messages
FROM messages
WHERE recipient_id = 1
GROUP BY sender_id, recipient_id
) m
GROUP BY recipient_id