ID TO FROM MESSAGE DATE
Wszystko by było proste gdyby nie fakt, że muszę policzyć wiadomości przesłane do mnie oraz te ode mnie.
(SELECT message, date FROM messages WHERE (`from`='.$rid.' AND `to`='.$uid.') ) UNION (SELECT message, date FROM messages WHERE (`to`='.$rid.' AND `from`='.$uid.'))
W zapytaniu powyżej znam swojego rozmówicę i pobieram korespondencję z nim, ale jak Zadać pytanie, kiedy chcę wybrać ze wszystkich userów?
37 - to moje ID
SELECT count(m.id),m.message, m.date FROM messages m, users u WHERE ( `from` = u.id AND `to` =37 ) UNION SELECT count(m.id),m.message, m.date FROM messages m, users u WHERE ( `to` = u.id AND `from` =37 ) ) AS m LIMIT 0 , 30
No i wymyśliłem takie zapytanie, ale pokazuje mi ile jest wysłanych i przysłanych, a chciałbym, żeby rozdzielał to jeszcze na użytkowników
Idąc dalej wymyśłiłem coś takiego:
SELECT * FROM ( SELECT m.FROM, m.TO, count(m.id),m.message, m.date FROM messages m, users u WHERE ( `from` = u.id AND `to` =37 )GROUP BY u.id UNION SELECT m.FROM, m.TO,count(m.id),m.message, m.date FROM messages m, users u WHERE ( `to` = u.id AND `from` =37 ) GROUP BY u.id ) AS m
No i wszystko fajnie tylko że pokazuje
FROM TO COUNT
1 37 5
37 1 8
co oznacza że razem wysłanych między nami wiadomości było 13, i to jest właśnie sedno sprawy, chcę uzyskać coś w stylu:
USER ILOSC_WIADOMOSCI
1 13
Myślałem że UNION właśnie zsumuje mi kolumnę count(m.id)
Udało mi się zrobić to w inny sposób
SELECT * FROM ( SELECT m.FROM, m.TO, count( m.id ) AS cc, m.message, m.date FROM messages m, users u WHERE ( ( `from` = u.id AND `to` =37 ) OR ( `to` = u.id AND `from` =37 ) ) GROUP BY u.id ) AS m ORDER BY cc
Teraz żeby wiedzieć, z którym użytkownikiem mam wiadomości należy dodać IF
SELECT * FROM ( SELECT m.FROM, m.TO, count( m.id ) AS cc, m.message, m.date, IF( m.FROM =37, m.TO, m.FROM ) AS userid FROM messages m, users u WHERE ( ( `from` = u.id AND `to` =37 ) OR ( `to` = u.id AND `from` =37 ) ) GROUP BY u.id ) AS m ORDER BY cc
No dobra, doszedłem do czegoś takiego
SELECT count( m.id ) AS cc, IF( m.FROM =37, m.TO, m.FROM ) AS userid FROM messages m, users u WHERE ( ( `from` = u.id AND `to` =37 ) OR ( `to` = u.id AND `from` =37 ) ) GROUP BY u.id ORDER BY cc LIMIT 0 , 30
Otrzymuję tabelę
CC USERID
czyli
ILOŚĆ_WIADOMOŚCI USER
Moje pytanie brzmi jak teraz wyciągnąć inne dane tego użytkownika np imię i nazwisko?
no dobra udało się, jak by ktoś śledził temat to rozwiązaniem jest
SELECT * FROM ( SELECT count( m.id ) AS cc, IF( m.FROM =37, m.TO, m.FROM ) AS userid FROM messages m, users u WHERE ( ( `from` = u.id AND `to` =37 ) OR ( `to` = u.id AND `from` =37 ) ) GROUP BY u.id ORDER BY cc ) AS mm LEFT JOIN users us ON us.id = userid LIMIT 0 , 30