-1

データベースにユーザー システムがあり、友達を追加できるようにしたいと考えています。ユーザーは次のことができる必要があります。

  • 嘆願書にメッセージを送る
  • ユーザをブロックする
  • フレンドユーザーにエイリアスを設定します。

だから私はこの表を見ました:

id_friend
id_user1
id_user2
id_user_sender
alias_user1 NULL
alias user2 NULL
status
message NULL
date_sent
date_accepted NULL

各列について説明します。

  • id_friend : テーブルの PK。
  • id_user1 : users テーブルの FK
  • id_user2 : users テーブルの FK
  • id_user_sender : 請願の送信者の id_user
  • alias_user1 NULL: id_user1 によって id_user2 に設定されたエイリアス (オプション)
  • alias user2 NULL: id_user2 によって id_user1 に設定されたエイリアス (オプション)
  • status : 0 の場合、友情保留中。友達1人なら。2つの友情がブロックされた場合。
  • message NULL: status = 0 の場合、送信者によって設定されたメッセージを含めることができます
  • date_sent : 送信者が請願書を送信した日付
  • date_accepted NULL: user_requested がフレンドシップを承認した日付。

次に、特定のユーザーのすべての友達を取得するには、次のようにします。

select id_user1, id_user2 from friends where id_user1 = $my_user_id or id_user2 = $my_user_id and status = 1;

次に、私のものと等しい id_users を破棄するので、結果には私の友人であるユーザーのみが含まれます。しかし、エイリアスを取得するには、私にはわかりません。もっとテーブルがありますか?

私はそれを間違って設計していると思います...ヒントやアドバイスはありますか?例を教えてください。

さらに情報が必要な場合はお知らせください。投稿を編集します。

4

2 に答える 2

3

私がするいくつかのこと:

  1. id_user_sender は必要ありません。送信者は常に id_user1 に保存され、もう一方は id_user2 に保存されると想定できます。
  2. ステータスを、ブロックされたというブール値に置き換えることができます。date_accepted 値が null かどうかを確認することで、友情が保留中かどうかを判断できます。

$my_user_id の友人のエイリアス名を取得するには、このクエリを呼び出すことができます

select case when id_user1=$my_user_id then alias_user2 else alias_user1 end
from friends
where id_user1=$my_user_id or id_user2=$my_user_id
于 2013-10-25T13:09:00.110 に答える
0
select id_user1, id_user2, alias_user2 from friends where id_user1 = $my_user_id or id_user2 = $my_user_id and status = 1;

多分これはあなたが探しているものです。

于 2013-10-25T13:05:39.487 に答える