0

私は現在、楽しみと学習のためだけに、小さな Web サービスを作ろうとしています。(最近、プログラミングを実践的に学び始めました。)サービスはtwitterのようなものです。ユーザーは友達をフォローしてステータスを取得します。

リレーショナルデータベースについて質問です。

「ユーザー」、「フレンドシップ」、「ステータス」の 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' が存在しません」をスローします。

4

2 に答える 2

1

最初の結合ステートメントには「users」が含まれていますが、テーブル名は「user」です。これは一般的な初心者のエラーです。標準を選択し、それに従う必要があります。私が目にするほとんどの DB は単数形を使用しているため、テーブル名が「友人」であろうと「友人」であろうと混乱はありません。

とはいえ、心配する必要はありませんが、最初は誰もがこの間違いを犯すと思います。他にもエラーがあるかもしれませんが、これはすぐに出てきます。

それを修正してみて、どうなるか教えてください。

ああ、テーブル選択では、どのテーブルから選択しているかを宣言します。つまり、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 に答える