chat - SQL with limit by result -
i making simple chat, , need way 10 "messages" pr. conversation, can't figure out how so.
this have tried. sql:
select c.* chat c inner join users su on su.id = c.sender_user_id inner join users ru on ru.id = c.receiver_user_id sender_user_id='1234' or receiver_user_id='1234' order created asc
now messages user id 1234 ... want 10 messages pr. conversation.
hope make sense
the standard sql way use window/analytic functions:
select t.* (select c.*, su.name sender_name, ru.name receiver_name, row_number() on (partition c.conversation order c.created desc) seqnum chat c inner join users su on su.id = c.sender_user_id inner join users ru on ru.id = c.receiver_user_id sender_user_id = '1234' or receiver_user_id = '1234' ) t seqnum <= 10 order created asc;
note need better job of selecting columns want in subquery. using *
result in duplicate column names.
edit:
in mysql, can using variables:
select t.* (select c.*, su.name sender_name, ru.name receiver_name, (@rn := if(@c = c.conversation, @rn + 1, if(@c := c.conversation, 1, 1) ) ) seqnum chat c inner join users su on su.id = c.sender_user_id inner join users ru on ru.id = c.receiver_user_id cross join (select @c := 0, @rn := 0) vars sender_user_id = '1234' or receiver_user_id = '1234' order c.conversation, c.created desc ) t seqnum <= 10 order created asc;
Comments
Post a Comment