twitter喜欢关系数据库?

时间:2012-05-08 18:38:26

标签: mysql sql database select relational-database

我目前正在尝试制作一个小型网络服务,只是为了娱乐和学习。 (我最近开始学习编程。) 这项服务就像推特。用户跟随他们的朋友并获得他们的状态。

我对关系数据库有疑问。

有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'不存在。”

2 个答案:

答案 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等...)