【问题标题】:MySQL Database schema for simple chat one to oneMySQL 数据库模式,用于一对一的简单聊天
【发布时间】:2018-05-29 06:55:11
【问题描述】:

我尝试使用这些架构进行简单的聊天:

mes_id  int(10) unsigned Auto Increment  
mes_useid_receiver  int(10) unsigned     
mes_useid_sender    int(10) unsigned     
mes_date    int(10) unsigned     
mes_message text     
mes_read    tinyint(3) unsigned [0]  
mes_visible_for_who int(10) unsigned NULL   NULL = both; 0 = none; ID user

问题是,如何获取已接收消息和已发送消息的联系人列表?

我正在尝试这样的事情:

SELECT use_name, MAX(mes_date) AS date 
FROM message JOIN user ON mes_useid_receiver=use_id 
WHERE uti_id!=1 
AND (mes_useid_receiver=1 OR mes_useid_sender=1) 
AND (mes_visible_for_who IS NULL OR mes_visible_for_who=1) 
GROUP BY use_id 
ORDER BY date DESC

但是通过这个查询,我只能获取向 user_id = 1 发送消息的联系人,我还想获取 user_id = 1 发送消息的联系人。

已编辑:

通过联合,我几乎可以得到我想要的:

SELECT use_id, use_name, mes_read FROM message
JOIN user ON mes_useid_receiver=use_id
WHERE use_id!=1 
AND (mes_useid_receiver=1 OR mes_useid_sender=1) 
AND (mes_visible_for_who IS NULL OR mes_visible_for_who=1) GROUP BY use_id

UNION

SELECT use_id, use_name, mes_read FROM message
JOIN user ON mes_useid_sender=use_id
WHERE use_id!=1 
AND (mes_useid_receiver=1 OR mes_useid_sender=1) 
AND (mes_visible_for_who IS NULL OR mes_visible_for_who=1) GROUP BY use_id

我需要 mes_date 来排序列表,但如果我选择 mes_date 我会得到重复的行。

感谢您的帮助。

【问题讨论】:

    标签: php mysql chat mariadb


    【解决方案1】:

    如果你要进入这个根目录,那么我的建议如下:

    SELECT *  FROM(
    
        (SELECT use_id, use_name, mes_read ,mes_date FROM message
        JOIN user ON mes_useid_receiver=use_id
        WHERE use_id!=1 
        AND (mes_useid_receiver=1 OR mes_useid_sender=1) 
        AND (mes_visible_for_who IS NULL OR mes_visible_for_who=1)) GROUP BY use_id 
    
        UNION
    
        (SELECT use_id, use_name, mes_read ,mes_date FROM message
        JOIN user ON mes_useid_sender=use_id
        WHERE use_id!=1 
        AND (mes_useid_receiver=1 OR mes_useid_sender=1) 
        AND (mes_visible_for_who IS NULL OR mes_visible_for_who=1)) GROUP BY use_id 
    
    ) as d Order By mes_date desc
    

    还看看你是否可以避免在每个选择中分组(你会觉得表现不佳)

    问候

    【讨论】:

    • 谢谢!按 use_id 分组可以在外面。
    猜你喜欢
    • 2019-03-28
    • 2011-03-06
    • 2016-04-21
    • 2017-06-30
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 2018-02-09
    • 2017-10-06
    相关资源
    最近更新 更多