能写出这条SQL语句的基本都是大神
用户信息表(lc_member):
CREATE TABLE `lc_member` (
`member_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '会员自增ID',
`member_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '会员用户名',
`member_truename` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '会员真实姓名',
`member_nickname` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '会员昵称',
`member_avatar` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '会员头像',
`member_sex` tinyint(1) NULL DEFAULT NULL COMMENT '会员性别',
PRIMARY KEY (`member_id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '会员表' ROW_FORMAT = Dynamic;
所需的数据仅为红框中的数据;
聊天记录表(lc_chatmsg):
CREATE TABLE `lc_chatmsg` (
`m_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '消息自增ID',
`f_id` int(10) UNSIGNED NOT NULL COMMENT '会员ID',
`f_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '会员名',
`f_ip` varchar(15) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '发自IP',
`t_id` int(10) UNSIGNED NOT NULL COMMENT '接收会员ID',
`t_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '接收会员名',
`t_msg` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '消息内容',
`r_state` tinyint(1) UNSIGNED NOT NULL DEFAULT 2 COMMENT '状态:1为已读,2为未读,默认为2',
`chatmsg_addtime` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '添加时间',
`msg_type` tinyint(3) UNSIGNED NOT NULL DEFAULT 1 COMMENT '类型:1为文本,2为文件',
PRIMARY KEY (`m_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '消息表' ROW_FORMAT = Dynamic;
需求(这些事根据自己想的写出来的,只要结果一致就行,但大概需求不变):
- 从聊天记录表中查询出指定用户的所有记录,例如李四登录,查询出发送者或接受者为李四的所有信息记录;
- 从查出来的信息记录中根据非李四字段的另一个f_id或t_id的信息进行分组,例如发送者为李四,接受者为张三,或发送者为张三,接受者为李四,这都属于好友张三的信息记录;
- 查询出每个好友的最新记录,例如发送者为李四,接受者为张三,或发送者为张三,接受者为李四,这都属于好友张三的信息记录,从此记录中返回未读记录数(可选需求,消息列表显示未读数),最新的消息记录,好友id;
- 将从聊天记录中查出来的数据和用户数据关联,利用聊天记录查出来的好友id和用户id进行绑定;
- 最终返回结果为好友id,好友名称,好友头像,消息时间,消息内容,未读信息数(可选),消息类型;
最终实现效果: