0

我目前正在尝试制作一个小型网络服务,只是为了好玩和学习。(我最近开始实际学习编程。)服务就像 twitter。用户关注他们的朋友并获取他们的状态。

我有一个关于关系数据库的问题。

有3个表,分别是'user'、'friendship'和'status'。以下是描述这些表格外观的代码。

    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,查找好友的userid、username、status和created(of status)。

我尝试了一些 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'不存在。”

4

2 回答 2

1

您的第一个联接语句具有“用户”,而您的表名是“用户”。这是一个常见的新手错误。您应该选择标准并遵循它。我看到的大多数数据库都使用单数形式,因此您的表名是“朋友”还是“朋友”都不会混淆。

不过不用担心,我认为几乎每个人在开始时都会犯这个错误。可能还有其他错误,但这个错误会立即弹出。

尝试修复它并让我们知道它是如何进行的。

哦,在表选择中声明我从哪个表中选择:即从 user.userid 中选择,...</p>

于 2012-05-08T19:50:47.760 回答
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 客户端、TwitterUser 等...)

于 2012-05-08T20:20:35.773 回答