根据用户名分组聊天消息

时间:2018-09-08 11:20:15

标签: mysql database

我正在为我的网站创建一个聊天系统,但我陷入了一个小问题,我想将其他用户的邮件分组到当前用户与之交谈的用户名上,例如我有4个用户和3个对话。在对话1中,user1(john)与user2(smith)交谈,在对话2中,user2(smith)与user3(michael)交谈,在对话3中,user1(john)与user3(michael)交谈,因此,当user1登录到他的收件箱中的帐户时将显示两个与用户名smith的对话,以及另一个与用户名michael的对话,依此类推.. 这是我的桌子..

1. 用户:

  • id
  • 用户名
  • 密码

2. 对话:

  • conversation_id
  • from_user
  • to_user

3. 消息:

  • message_id
  • conversation_id
  • user_id
  • message_text
  • 消息日期
  • 见过

它必须像facebook messanger ...任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

那样搜索

void c_crypto::encrypt_buffer(std::string &input, unsigned char key[AES_KEY_SIZE], unsigned char iv[AES_KEY_SIZE]) {
    CryptoPP::AES::Encryption aesEncryption(key, AES_KEY_SIZE);
    CryptoPP::CBC_Mode_ExternalCipher::Encryption cbcEncryption(aesEncryption, iv);

    CryptoPP::StreamTransformationFilter stfEncryptor(cbcEncryption, new CryptoPP::StringSink(input));
    stfEncryptor.Put(reinterpret_cast<const unsigned char*>(input.c_str()), input.length());
    stfEncryptor.MessageEnd();

    input = base64_encode(input);
}

加入用户表:

std::string c_crypto::base64_encode(std::string &input) {
    std::string result;
    CryptoPP::StringSource(input, true, new CryptoPP::Base64Encoder(new CryptoPP::StringSink(result)));
    return result;
}

std::string c_crypto::base64_decode(std::string &input) {
    std::string result;
    CryptoPP::StringSource(input, true, new CryptoPP::Base64Decoder(new CryptoPP::StringSink(result)));
    std::cout << (input.size() % 16 == 0) << std::endl;
    return result;
}

答案 1 :(得分:0)

我真的不知道这是不是您的职位,但我会尽力提供帮助。

首先,当某人发送消息时,您需要在对话表中签入,如果没有对话,则创建一个对话,但是需要添加一个新列其中会存储上次发送或接收的邮件的日期并将其命名为 Last_Message ,当某人发送邮件时,您会在该列中更新日期和时间,然后将用户发送的邮件插入< strong>邮件表。

现在,当用户打开其收件箱时,您只需要查询即可选择与 from_user to_user 列中的用户名相匹配的会话,并按存储在其中的日期和时间进行排序列 Last_Message