sql - Displaying messsage in specific format in mysql php -


i have created messaging system users allow users send message another.

for have created 2 tables.

  conversation(conversation_id,user_id1,user_id2)   messages(message_id,conversation_id,sender_id,receiver_id,message,created_time) 

if users talking first time, conversation_id created user_id1(who initiate chat) , user_id2(to user_id1 sending message)

messages table contain info related message.

now want is, create message summary page logged in user can view conversation list between other users order created_time, group conversation_id.

here table data:

conversation_id | user_id1 | user_id2      1                100       103      2                101       103      3                103       102           message_id| conversation_id| sender_id| receiver_id| message | created_time    1             1            100       103           msg    2012-06-08 08:38:57    2             1            103       100           msg b    2012-06-08 08:39:40    3             2            101       103           msg c    2012-06-08 08:40:20    4             3            102       103           msg d    2012-06-08 08:41:10 

and here output looking for: lets logged in user id: 103

conversation_id| conversation_with | last_message | created_time       3              102              msg d         2012-06-08 08:41:10       2              101              msg c         2012-06-08 08:40:20       1              100              msg b         2012-06-08 08:39:40 

so output ordering created_time, grouping conversation_id , displaying id of user in conversation_with , userid 103 having conversation.

can provide mysql query need output.

this fun one. so, have 3 main things solve.

  1. alternate conversation_with column depending on desired user shows amongst 2 columns.
  2. greatest-n-per-group find recent message.
  3. least-n-per-group find earliest message created_time.

the first 1 solved querying twice, alternating user_id column, unioning results, , ordering unioned results created_time. think can solve 1 query , no unions, works now.

2 , 3 little more involved. here's sql fiddle query: http://sqlfiddle.com/#!2/bf2b7/1

tl;dnr

select * (     select c.conversation_id, c.user_id2 conversation_with, m1.message last_message, m3.created_time      conversation c       join messages m1 on c.conversation_id = m1.conversation_id       left outer join messages m2 on (c.conversation_id = m2.conversation_id                                           , (m1.created_time < m2.created_time or m1.created_time = m2.created_time , m1.message_id < m2.message_id))       join messages m3 on c.conversation_id = m3.conversation_id       left outer join messages m4 on (c.conversation_id = m4.conversation_id                                          , (m3.created_time > m4.created_time or m3.created_time = m4.created_time , m3.message_id > m4.message_id))     user_id1 = 103 , m2.message_id null , m4.message_id null   union     select c.conversation_id, c.user_id1 conversation_with, m1.message last_message, m3.created_time      conversation c       join messages m1 on c.conversation_id = m1.conversation_id       left outer join messages m2 on (c.conversation_id = m2.conversation_id                                           , (m1.created_time < m2.created_time or m1.created_time = m2.created_time , m1.message_id < m2.message_id))       join messages m3 on c.conversation_id = m3.conversation_id       left outer join messages m4 on (c.conversation_id = m4.conversation_id                                          , (m3.created_time > m4.created_time or m3.created_time = m4.created_time , m3.message_id > m4.message_id))     user_id2 = 103 , m2.message_id null , m4.message_id null                                         ) conversations order created_time desc 

Comments

Popular posts from this blog

django - How can I change user group without delete record -

java - Need to add SOAP security token -

java - EclipseLink JPA Object is not a known entity type -