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

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -