【问题标题】:Database conversations get list of sent messages数据库会话获取已发送消息的列表
【发布时间】:2011-05-29 18:20:23
【问题描述】:

跟进以下帖子:Get last row PER Group

假设您以 user:1 身份登录,我想在会话组中为尚未收到响应的每条已发送消息获取一行(本质上,该会话只有 1 条消息)。对于我想获得的每个对话,对话的“主题”、ToUser 和 DateTime

非常欢迎任何帮助,关于这个主题的最后一个问题对我来说非常宝贵,我非常感谢。

    CREATE TABLE messages (
    ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FromID INT NOT NULL,   
    ToID INT NOT NULL,    
    ConversationID INT NOT NULL, 
    Message varchar(255),
    DateTime DATETIME                                       
    ) ENGINE=InnoDB;


CREATE TABLE conversations (
    ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Subject varchar(255)            
    ) ENGINE=InnoDB;



INSERT INTO conversations (ID, Subject) VALUES (1, "hey"), (2, "hey2"), (3, "hey3");
INSERT INTO messages (FromID, ToID, ConversationID, Message, DateTime) VALUES (1,2, 1, "Hi", "This is a test message", "2010-08-08 16:23:48");        
INSERT INTO messages (FromID, ToID, ConversationID, Message, DateTime) VALUES (1,2, 1, "", "Hey again you have not answered", "2010-08-08 16:23:52");                                                                                                                                               
INSERT INTO messages (FromID, ToID, ConversationID, Message, DateTime) VALUES (2,1, 1, "", "Hi this is my answer", "2010-08-08 16:23:59");


INSERT INTO messages (FromID, ToID, ConversationID, Message, DateTime) VALUES (2,1, 2, "2.Hi", "2.This is a test message", "2010-08-08 16:25:48");        
INSERT INTO messages (FromID, ToID, ConversationID, Message, DateTime) VALUES (1,2, 2, "", "2.Hi back", "2010-08-08 16:25:52");                                                                                                                                               
INSERT INTO messages (FromID, ToID, ConversationID, Message, DateTime) VALUES (2,1, 2, "", "2.Hi this is my answer", "2010-08-08 16:25:59");


INSERT INTO messages (FromID, ToID, ConversationID, Message, DateTime) VALUES (2,1, 3, "3.Hi", "3.This is a test message", "2010-08-08 16:27:48");        
INSERT INTO messages (FromID, ToID, ConversationID, Message, DateTime) VALUES (1,2, 3, "", "2.Hi back", "2010-08-08 16:27:52");   
INSERT INTO messages (FromID, ToID, ConversationID, Message, DateTime) VALUES (1,2, 3, "", "2.Hello are you there?", "2010-08-08 16:27:59");                                                                                                                           

【问题讨论】:

    标签: mysql


    【解决方案1】:

    如果我了解您要查找的内容,我相信此查询将为您提供所需的内容:

    SELECT `Subject`, `ToID`, `DateTime`, COUNT(*) AS `NumberOfMessagesInConversation`
    FROM `messages`
    GROUP BY `ConversationID`
    HAVING `NumberOfMessagesInConversation` = 1
    

    编辑:这个查询应该能得到同样的结果,但当你有大量对话时可能会更有效:

    SELECT `Subject`, `ToID`, `DateTime`
    FROM
    (
        SELECT `ConversationID`, COUNT(*) AS `NumberOfMessagesInConversation`
        FROM `messages`
        GROUP BY `ConversationID`
        HAVING `NumberOfMessagesInConversation` = 1
    ) AS `message_counts`
    JOIN `messages` ON `messages`.`ConversationID` = `message_counts`.`ConversationID`
    

    【讨论】:

    • 嘿,非常感谢!抱歉,我犯了一个错误,实际上我在另一张桌子上有主题,因为它的对话风格总是只有一个主题。您如何修改查询以检索 t?
    • 像这样添加另一个 JOIN:JOIN conversations ON conversations.ID = messages.ConversationID,然后将 conversations.subject 添加到查询的 SELECT 部分。如果它是正确的,不要忘记接受这个答案:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 2016-05-19
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多