0

私のシステムでは、オンライン ステータスを含むいくつかの要素を含むユーザーのテーブルを使用しています。ここで、各ユーザーが連絡先を追加できるようにする機能を追加したいと思います。つまり、データベースから既存のユーザーを、名前とオンライン ステータスを表示する友人または連絡先のリストに追加します。ただし、オンラインステータスの変更が発生したときに連絡先リストで更新する必要があるため、新しいテーブルを作成しても役に立ちません。

私はこれについてビューを調べてきましたが、データベースの経験があまりないため、これが正しい方法であるかどうか、およびその方法についてもう少し詳しく知りたいです。

私が考えていた手順は次のとおりです。

  1. ユーザーが登録したら、view_name = username_view などのビューを作成します。
  2. 連絡先を追加するには、メイン ユーザー テーブルからデータを選択し、ユーザーのビューに追加します
  3. 連絡先を削除するには、ビューから選択したデータを削除します。

ビューでこれが可能かどうかはわかりません。そうでない場合は、私を助けてください。

ありがとう。

4

1 に答える 1

0

ER データベース = エンティティおよび関係データベースは、エンティティ「ユーザー」を含む 1 つのテーブルと、ユーザーを別のユーザーに接続する関係「友人」用の 1 つのテーブルを使用して処理します。

そのためのクエリは次のとおりです。

SELECT users.* 
FROM friends 
LEFT JOIN users ON (users.user_id = friends.friend_id) 
WHERE friends.user_id = :user

例:

エンティティ ユーザーのユーザー テーブル

CREATE TABLE user (user_id SERIAL, name TINYTEXT NOT NULL);

例のユーザー

user_id | name
      1 | Anna
      2 | Bertil
      3 | Carl
      4 | David
      5 | Erik

2 人のユーザー間の関係のためのフレンド テーブル (ユーザーごとに 1 つではなく、1 つだけ)

CREATE TABLE friends (
  user_id BIGINT UNSIGNED NOT NULL,
  friend_id BIGINT UNSIGNED NOT NULL,
  PRIMARY KEY (user_id, friend_id)
);

Anna が Beril と Carl を友達として追加し、Carl が David と Erik を友達として追加した場合、テーブルの内容は次のようになります。

user_id | friend_id
      1 |         2
      1 |         3
      3 |         4
      3 |         5

Anna の友人の名前を一覧表示したい場合、Annas の user_id = 1 であることがわかっている場合は、このクエリを使用できます (上記のような)。

SELECT users.name 
FROM friends 
LEFT JOIN users ON (users.user_id = friends.friend_id) 
WHERE friends.user_id = 1
于 2012-06-30T18:29:06.813 に答える