Select the Latest Message Between the communication of two user in mysql

后端 未结 6 1862
旧时难觅i
旧时难觅i 2020-12-17 03:33

I have a simple table maintaining messages between users. The table structure looks like

     sender    receiver   message   sendtime
      1          2              


        
相关标签:
6条回答
  • 2020-12-17 03:43

    I take 30 mins to find the solution for this problem because I have thew same problem just take it simple

    SELECT DISTINCT sent_by FROM messages WHERE sent_to = 1 UNION SELECT DISTINCT sent_to FROM messages WHERE sent_by = 1
    
    0 讨论(0)
  • 2020-12-17 03:44

    To me it feels simpler to use an own ID based on the sender and receiver. No JOIN and just one GROUP BY needed:

    SELECT sender, receiver, message, MAX(time)
    FROM (
      SELECT *,
        CASE WHEN sender < receiver 
                  THEN CONCAT(sender,'&', receiver)
                  ELSE CONCAT(receiver,'&', sender) END AS fromto
      FROM data) AS a
    GROUP BY fromto
    
    0 讨论(0)
  • 2020-12-17 03:50
    SELECT data.* FROM 
    (SELECT MAX(sendtime) AS sendtime 
             FROM data 
             WHERE 1 IN (sender,receiver)
             GROUP BY IF (1 = sender,receiver,sender)) AS latest
    LEFT JOIN data ON latest.sendtime = data.sendtime AND 1 IN (data.sender, data.receiver)
    GROUP BY IF (1 = data.sender,data.receiver,data.sender)
    

    I recommend to use unique sequence id in your table to avoid external GROUP BY. If you have incrementing unique message_id (i.e. bigger message_id corresponds to later sendtime), the query would be much simpler:

    SELECT data.* FROM 
    (SELECT MAX(message_id) AS message_id 
             FROM data 
             WHERE 1 IN (sender,receiver)
             GROUP BY IF (1 = sender,receiver,sender)) AS latest
    LEFT JOIN data USING(message_id)
    
    0 讨论(0)
  • 2020-12-17 03:54

    Try making message as the primary key and put sender and receiver in 2 separate tables for the same message like this:

    Table 1: {message, sender, sendtime}
    Table 2: {message, receiver, sendtime}
    
    0 讨论(0)
  • 2020-12-17 04:02

    This will work out

    $query = "SELECT * FROM tableName WHERE `sender`='$userNumber' OR `receiver`='$userNumber' ORDER BY `sendtime` DESC LIMIT 0,1";
    
    0 讨论(0)
  • 2020-12-17 04:09

    Try this:

    SELECT  Distinct (*)
    FROM    tableName   m
    WHERE   date =
        (
        SELECT  MAX (date)
        FROM    tableName
    
        )
    
    0 讨论(0)
提交回复
热议问题