0

基本的に、各ユーザーが自分の写真を投稿すると同時に、ユーザーが別のユーザーをフォローしてそのユーザーの記事を見ることができるようにするプログラムを複数のユーザーで実行しようとしています。

私はデータベースを持っています:

user(ユーザー ID )

写真(タイトル

posted_by(ユーザーID , _title )

フォロワー(ユーザーIDフォロワーID_ )

現在、ログに記録されたユーザーが投稿した記事と、ログに記録されたユーザーがフォローしているユーザーが投稿した記事の両方を取得する SQL を作成しようとしています。

私が書いたSQLは次のとおりです。

"SELECT * FROM pictures NATURAL JOIN users NATURAL JOIN posted_by NATURAL JOIN followers WHERE user-id = '" . $user-id . "' OR follower-id = '" . $user-id . "'";

さて、これの問題は

WHERE user-id = '" . $user-id

フォロワー テーブルのユーザー ID は実際にはこのユーザーの ID を表すのではなく、このユーザーがフォローしているユーザーのユーザー ID を表すため、この部分は正しい答えを返しません。

問題は次のとおりです: follower-user-id と followee-user-id の両方がユーザー テーブル内の別のユーザーによって表されるように、フォロワー テーブルを再構築するにはどうすればよいですか?

4

2 に答える 2

1

既存の構造を考慮して、

このクエリは、目的の出力を提供します。

select pst.userid, pic.title
    from pictures pic
      inner join posted_by pst on pic.title = pst.title
      left join followers flw on pst.userid = flw.userid
where pst.userid = <userid> or flw.followerid = <userid>

ここでフィドルを確認できます

于 2013-06-07T04:49:08.510 に答える
0

これを設計する最善の方法は、テーブルpostの親テーブルとして名前を付けたテーブルpictureを作成することだと思いますarticle(写真と記事には投稿する外部キーがあります)。投稿テーブルに共通のフィールド (ユーザー ID や日付など) を配置すると、それを使用して、非常に単純な SQL で必要なすべての投稿を選択して並べ替えることができます。

于 2013-06-07T03:16:30.113 に答える