1

I want to list all a conversation pairs in my database. I've table message where have store about message info.
I've also tried this but not work for me Link becasue distinct select only columns specified.
Ex. When $_SESSION['userid'] = 1

table message

sender_id   sendto_id    created(datetime)
1           2
1           2
1           3
1           4
3           1
3           1
2           4
4           2

My result have a reputations, between 1,3 and 3,1.

sender_id   sendto_id
1           2
1           3
1           4
3           1

I just want like this and let's it chooses newest added field for each pairs. Ex. 1-2(1),1-2(2) and 2-1 it should be 2-1 if 2-1 is newest or 1-2(2) if it newest.

sender_id   sendto_id   created(datetime)
2           1           newest of pair 1-2 or 2-1
1           3           newest of pair 1-2 or 2-1
1           4           newest of pair 1-2 or 2-1

And my SQL here, please help! thank you.

select m.*,
       (select MAX(created)
          from message n
         where (n.senderid = m.sendtoid AND n.sendtoid = '$userid')
            OR (n.senderid = '$userid' AND n.sendtoid = m.sendtoid)) lastsend
  from message m
 where (m.senderid = '$userid' OR m.sendtoid = '$userid')
 group by m.senderid, m.sendtoid
 order by lastsend desc
Community
  • 1
  • 1
Marcus
  • 295
  • 4
  • 16

1 Answers1

1

Is this what you want?

select least(sender_id, sendto_id) as sender_id,
       greatest(sender_id, sendto_id) as sendto_id,
       min(created_datetime)
from message m
group by least(sender_id, sendto_id), greatest(sender_id, sendto_id);
Gordon Linoff
  • 1,242,037
  • 58
  • 646
  • 786
  • Yeah, but not work what's wrong? `You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as sender_id, greatest(sender_id, sendto_id)' at line 4` – Marcus Jul 24 '14 at 01:56
  • 2
    @Marcus . . . `as` doesn't belong in the `group by` clause, copy-and-paste error. – Gordon Linoff Jul 24 '14 at 02:11