我目前正在尝试制作一个小型网络服务,只是为了娱乐和学习。 (我最近开始学习编程。) 这项服务就像推特。用户跟随他们的朋友并获得他们的状态。
我对关系数据库有疑问。
有3个表,分别是'用户','友谊'和'状态'。 这里有代码来描述这些表的外观。
create table user (
id int unsigned auto_increment primary key,
username varchar(16) not null,
password varchar(255) not null,
created datetime default null
);
create table friendship (
id int unsigned auto_increment primary key,
userid int not null,
friend int not null,
created datetime default null
);
create table status (
id int unsigned auto_increment primary key,
userid int not null,
current_status int not null,
created datetime default null
);
'user.id'等于'friendship.userid'和'status.userid'。
·情况是这样;
1,用户登录后,将获取其朋友的状态号码。
2,php获取了用户的id并找到了他朋友的用户ID,用户名,状态和创建状态(
)。我尝试了一些sql语句但没有工作。
任何超级sql编写器都能显示正确的sql吗?
干杯!
编辑1;
我试过像这样的sql;
select userid, username, current_status, created
from status
join users u1
on u1.id = status.userid
join friendship
on friendship.friend = u1.id
join user u2
on u2.id =friendship.userid
where u2.id = "the user's id from php";
和mysql抛出这个“#1146 - 表'Application.user'不存在。”
答案 0 :(得分:1)
您的第一个加入声明包含"用户"而您的表名是" user。"这是一个常见的新手错误。你应该选择标准并遵循它。我看到的大多数数据库使用单数形式,因此您的表名称是"朋友"或者"朋友。"
不过不用担心,我认为几乎每个人在开始时都会犯这个错误。可能还有其他错误,但会立即弹出。
尝试修复并让我们知道它是怎么回事。
哦,并在表中选择声明我从哪个表中选择:即来自user.userid的SELECT,...
答案 1 :(得分:0)
这样的事情应该有效:
select u1.userid, username, current_status, created
from status
inner join [user] u1 on u1.id = status.userid
inner join friendship on friendship.friend = u1.id
inner join [user] u2 on u2.id = friendship.userid
where u2.id = @User2Id
评论中提到过:表'Application.user'不存在
在SQL Server中,用户是一个保留字,因此我们在其周围添加方括号。 (见代码)。或者您将表名更改为其他名称(IE Client,TwitterUser等...)