このテーブルを自分自身に参加させて、2人のユーザーが両方ともフレンドリクエストを受け入れたかどうかを確認するにはどうすればよいですか?自分自身にテーブルに参加する
mysql> select * from friendships;
+---------+-----------+----------+
| user_id | friend_id | accepted |
+---------+-----------+----------+
| 1 | 2 | 1 |
| 2 | 1 | 0 |
| 3 | 1 | 1 |
| 1 | 3 | 1 |
| 1 | 4 | 1 |
| 4 | 1 | 0 |
| 5 | 1 | 1 |
| 1 | 5 | 0 |
+---------+-----------+----------+
8 rows in set (0.00 sec)
また、ユーザーオブジェクトを引き出します。
user 1
に未処理のフレンドリクエストがあるかどうかを確認できます。
mysql> select * from friendships join users on friendships.friend_id = users.id where friendships.user_id = 1 and accepted = false;
+---------+-----------+----------+----+------------+----------+--------------------+------------------+-----------------+
| user_id | friend_id | accepted | id | fullName | username | phone | verificationCode | accountVerified |
+---------+-----------+----------+----+------------+----------+--------------------+------------------+-----------------+
| 1 | 5 | 0 | 5 | Tom Tester | tom | +16502222222222222 | 4444 | 1 |
+---------+-----------+----------+----+------------+----------+--------------------+------------------+-----------------+
1 row in set (0.00 sec)
しかし、どのように、私は彼の受け入れ要求を(すなわちuser 1
とuser 3
の両方が要求を受け入れた)のですか?
また、バックグラウンドでユーザーテーブルを設定しています。
EDITは:私のスキーマが、それはトリックがuser_id
とfriend_id
フィールドの組み合わせは、あなたの友情のテーブルの主キーとして機能していることである
CREATE TABLE friendships (
user_id int,
friend_id int,
accepted boolean not null default false,
UNIQUE KEY friend (user_id, friend_id)
);
あなたが作るためにあなたのテーブルの主キーを持っている必要がありますすることは –
私の知る限り、あなたのテーブルにありませんどの作業に参加しますそれがフレンドシップテーブルの標準スキーマです。 – ARMATAV
テーブルのエイリアスを使用すると、自分と結合することができます。次のようなものがあります:SELECT * FROM friendships JOIN friendships AS逆リバースON reverse.friend_id = friendships.user_id –