2011-10-17 8 views
1

私は2つのテーブルを持っています。最初の表は、要求され、それはこの他のユーザーを友達として追加するには?

+------------------------------+ 
|   Requests   | 
+----+-------------+-----------+ 
| id | user_from | user_to | 
+----+-------------+-----------+ 
| |    |   | 
| |    |   | 
| |    |   | 
| |    |   | 
+----+-------------+-----------+ 

のように見えるリクエストが送信され、他のユーザーが受け入れたとき、彼らは、彼らが今、本当に友達であることを知って、友人のテーブルに要求テーブルから移動します。

そして、ここでは私の友人のテーブルです:

+--------------------------------+ 
|   Friends    | 
+----+-------------+-------------+ 
| id | user_id | friend_id | 
+----+-------------+-------------+ 
| |    |    | 
| |    |    | 
| |    |    | 
| |    |    | 
+----+-------------+-------------+ 

今、あなたに私の質問ですが、どのようにお友達のテーブルへのリクエストテーブルからI「移動」(要求が受け入れられると)データ?

これを実行する場合、SQLクエリはどのように見えますか?

+0

どのようなsqlを使用していますか? – Anonymous

答えて

1

INSERT INTOクエリの後にDELETE FROMクエリが続きますか?あなたはRequests.idを持っている場合は、

INSERT INTO Friends (user_id, friend_id) SELECT Requests.user_id, Requests.friend_id FROM Requests WHERE Requests.id = $Your_ID; 
DELETE FROM Requests where id = $Your_ID 
1

「移動」しないでください。 1つにINSERTし、もう一方からDELETEします。それが原子的に起こることを確実にするために取引でそれを行います。

2

SQLには「移動」コマンドがありません。挿入と削除だけがあります。このため、トランザクションを使用したいと思います:

start transaction; 
insert into friends ... 
delete from requests ... 
commit; 
0
I「MOVE」(要求が受け入れられると) REQUESTSテーブルのデータは、FRIENDS表をどのように行う

???

リクエストテーブルに対してDELETEを実行し、フレンドテーブルでINSERTを実行します。実際には、2つの挿入をロールバックして、より簡単なクエリを作成したいと思うでしょう。

1

のようなもので、最初はfalseですacceptedと呼ばれる別のcoolumnを追加します。

+-------------------------------------------+ 
|   Friends      | 
+----+-------------+-------------+----------+ 
| id | user_id | friend_id | accepted | 
+----+-------------+-------------+----------+ 
| |    |    |   | 
| |    |    |   | 
| |    |    |   | 
| |    |    |   | 
+----+-------------+-------------+----------+ 

今、あなたは何を移動する必要はありません - あなただけのTRUEにフィールドを更新します。

+0

ああ大丈夫!私はそれが他の方法と同じように効果的だと思いますか? –

関連する問題