人生如果错了方向,停止就是进步
最近想做一个即时通讯的Android demo,但是一直不知道如何处理用户和好友之间的表关系。在网上找了好久也没找到合适的。我本人很少接触数据库,对数据库语句比较差。
但是这只是自己demo,只能自己写。
创建数据库
好了,不多逼逼,现在开始创建一个数据库吧。
create database my_chat;
这一步相信大家都很明白,就是创建了一个my_chat的数据库
创建表
选择数据库
use my_chat;
创建用户表
create table userTable ( userId int auto_increment primary key, --用户ID自增 password varchar(100), --密码 userName varchar(100) unique, --用户名 birthYear smallint, --出生年 birthMonth smallint, --出生月 birthDay smallint, --出生日 gender smallint, -- 0 为女性, 1 为男 avatarId int, --头像Id isOnline int, -- 0 为离线, 1 在线 signupTime varchar(100), -- XXXX-XX-XX-XX-XX (year-month-day-hour-minute)注册日期 hometown varchar(100), -- 家乡 location varchar(100) -- 现居住地 );
添加用户表信息
insert into userTable(password,userName,birthYear,birthMonth,birthDay,gender,avatarId,isOnline,signupTime,hometown,location) values("123456","test1",1997,09,23,1,0,1,"2020-09-23","广西/百色","广东珠海"); insert into userTable(password,userName,birthYear,birthMonth,birthDay,gender,avatarId,isOnline,signupTime,hometown,location) values("123456","test2",1998,03,26,0,1,1,"2020-09-23","广西/百色","广东珠海");
创建好友表
create table friendListTable ( masterId int, -- 此好友列表所属用户的id friendId int, --好友Id friendName varchar(100), --好友姓名 friendBirthYear smallint, --好友出生年 friendBirthMonth smallint, --好友出生月 friendBirthDay smallint, --好友出生日 friendGender smallint, --好友友性别 friendAvatarId int, --好友头像 friendIsOnline int, -- 好友在线状态 friendSignupTime varchar(100), --好友注册日期 friendHometown varchar(100), -- 好友家乡 friendLocation varchar(100), --好友现居住地 foreign key(masterId) references userTable(userId) on delete cascade --当用户信息修改或删除,该表同步修改 );
添加好友数据
insert into friendListTable(masterId,friendId,friendName,friendBirthYear,friendBirthMonth,friendBirthDay,friendGender,friendAvatarId,friendIsOnline,friendSignupTime,friendHometown,friendLocation) values(1,2,"test2",1998,03,26,0,1,1,"2020-09-23","广西/百色","广东珠海"); insert into friendListTable(masterId,friendId,friendName,friendBirthYear,friendBirthMonth,friendBirthDay,friendGender,friendAvatarId,friendIsOnline,friendSignupTime,friendHometown,friendLocation) values(2,1,"test1",1997,09,23,0,0,1,"2020-09-23","广西/百色","广东珠海");
获取所有好友
select * from friendListTable where masterId=2;
获取所有在线好友
select * from friendListTable where masterId=2 and friendIsOnline=1;
获取所有离线好友
select * from friendListTable where masterId=? and friendIsOnline=0;
创建消息表
create table unSendMsgs ( senderId int, receiverId int, msg text, _datetime datetime, type int )
添加消息数据
insert into unSendMsgs (senderId,receiverId,msg,_datetime,type) values(1,2,"这是n一条测试消息",now(),1); insert into unSendMsgs (senderId,receiverId,msg,_datetime,type) values(2,1,"收到",now(),0); insert into unSendMsgs (senderId,receiverId,msg,_datetime,type) values(1,3,"四号是个大撒比",now(),0); insert into unSendMsgs (senderId,receiverId,msg,_datetime,type) values(3,1,"三号明白",now(),1); insert into unSendMsgs (senderId,receiverId,msg,_datetime,type) values(1,3,"over over",now(),0);
查询一号和三号互相发送的消息
select * from unSendMsgs where senderId=1 and receiverId=3 or senderId=3 and receiverId=1 order by _datetime asc;
结果如下
+----------+------------+-----------------------+---------------------+------+ | senderId | receiverId | msg | _datetime | type | +----------+------------+-----------------------+---------------------+------+ | 1 | 3 | 四号是个大撒比 | 2020-09-20 12:01:14 | 0 | | 3 | 1 | 三号明白 | 2020-09-20 12:01:36 | 1 | | 1 | 3 | over over | 2020-09-20 12:01:51 | 0 | +----------+------------+-----------------------+---------------------+------+
好了,关于用户表和好友表哦以及消息表的关系就如上,日后可能会继续更新,从0搭建即时通讯demo,喜欢的可以点个赞