Mysql 数据库会话获取已发送消息的列表

Mysql 数据库会话获取已发送消息的列表,mysql,Mysql,跟进以下职位: 假设您以用户身份登录:1对于会话组中尚未收到响应的每个已发送消息,我希望获得一行消息(实际上,该会话只有一条消息)。对于我想要得到的每一个对话,对话的“主题”,ToUser和DateTime 任何帮助都是非常受欢迎的,关于这个问题的最后一个问题对我来说是非常宝贵的,我真的非常感谢 CREATE TABLE messages ( ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, FromID INT NOT NULL,

跟进以下职位:

假设您以用户身份登录: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");                                                                                                                           

如果我了解你在寻找什么,我相信这个查询会让你得到你想要的:

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 conversations ON conversations.ID=messages.ConversationID
,然后将
conversations.subject
添加到查询的选定部分。如果答案正确,不要忘记接受它:-)