【问题标题】:twitter like relational db?推特喜欢关系数据库?
【发布时间】:2012-05-17 06:44:07
【问题描述】:

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

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

有 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(ofstatus)。

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

【问题讨论】:

  • 你应该展示一些你尝试的 SQL。
  • 另外,status.current_status 应该是什么?它似乎应该是一个 varchar(是 db 的推文部分)
  • 这个问题缺乏研究。没有什么比创建表更重要了。老兄还有很长的路要走。
  • 还有一个建议。在您的表中,您有 createdtime,但您将其默认为 NULL。您应该将其默认为当前时间。在 mysql 中,这将使用 CURRENT_TIMESTAMP。
  • 错误消息告诉您确切的问题。试试看……

标签: mysql sql database select relational-database


【解决方案1】:

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

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

尝试解决这个问题并让我们知道它是怎么回事。

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

【讨论】:

  • 我修好了。我对自己很失望.. 但现在它的工作方式完全符合我的预期。非常感谢!
  • 哦。这是不久前(超过 1 年)。如果这解决了它,那么请评价为已回答。谢谢。不过我不会太失望。我因犯了导致致命错误的小错误而自责,并寻找了几天试图找到罪魁祸首。在这些情况下,我会稍作休息,然后以新的眼光回来,检查每个变量声明和使用是否与其他变量匹配。不过,体面的代码编辑器和 IDE 极大地帮助了语法检查和代码反射,以防止那些令人难以置信的错误。
【解决方案2】:

这样的事情应该可以工作:

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

就像 cmets 中提到的那样:表 'Application.user' 不存在

在 SQL Server 中,用户是一个保留字,所以我们在它周围加上方括号。 (见代码)。或者您将表名更改为其他名称(IE Client、TwitterUser 等...)

【讨论】:

  • 非常感谢。像你一样改变了我的sql。实际上我认为我需要学习 sql 并花一定的时间 :( 无论如何谢谢!
  • 哦,我添加了“状态”。在 select 语句中“创建”,因为 sql 说它模棱两可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-13
  • 2019-01-13
  • 2020-05-30
  • 1970-01-01
  • 2018-05-27
  • 2022-12-13
  • 2012-07-24
相关资源
最近更新 更多