0

私は、データベースからランダムに2人のユーザーを選択し、それらを使用不可にすることで、2人の使用可能なユーザーをペアにするアプリケーションを作成しようとしています(したがって、それらを再度選択することはできません)。

どうすればそれらを選択してペアリングできるのだろうかと思っていました。

私は次のデータベース構造を持っています。

USERS
| id        | autoincrement, primary key
| user_id   | user's ID
| connected | available, connecting, chatting


ROOMS
| id        | 
| room_name | 
| room_id   | 
| user_id   | first user connected
| user_id2  | second user connected

私は部屋を作っているのではなく、単にユーザーをペアにして部屋に送ろうとしているだけです。

4

3 に答える 3

1

レコードに参加するということですか?

次のようなことができます。

select * from rooms as r
left outer join users as u on r.user_id=u.id
left outer join users as u2 on r.user_id2=u2.id
where r.id=123

123 = ルーム ID。

編集:

これは、ランダムな 2 人のユーザーで Rooms レコードを更新する方法です。

UPDATE rooms
SET 
user_id=(SELECT id FROM users ORDER BY RAND() LIMIT 0,1),
user_id2=(SELECT id FROM users ORDER BY RAND() LIMIT 0,1),
where id=123

私はこれをテストしましたが、うまくいくようです。これにより、ユーザーが重複するのを防ぐことができます。

UPDATE rooms
SET 
user_id=(SELECT u1.id FROM users as u1 ORDER BY RAND() LIMIT 0,1),
user_id2=(SELECT u2.id FROM users as u2 where user_id <> u2.id ORDER BY RAND() LIMIT 0,1)
where id=123
于 2012-10-04T05:42:20.380 に答える
0

次のSELECTようなものである可能性があります。

SELECT user_id
FROM `USERS`
WHERE connected = 'available'
ORDER BY RAND()
LIMIT 2;

結果セットを解析し、user_idsを次のような変数に割り当てる必要があります。

$user_id1
$user_id2

最初UPDATEは次のようになります。

UPDATE `USERS` 
SET connected = 'connecting'
WHERE user_id IN ($user_id1,$user_id2);

は次のINSERTようになります。

INSERT INTO `ROOMS` (room_name,room_id,user_id,user_id2)
VALUES ($room_name,$room_id,user_id,user_id2);

最後に最後UPDATE

UPDATE `USERS` 
SET connected = 'connected'
WHERE user_id IN ($user_id1,$user_id2);

行をロックしたいと思うかもしれませんが、データベース管理のその部分はまだ把握していません。あなたの目的のために、あなたはそれを調べたいと思うかもしれません。

于 2012-10-04T06:01:28.070 に答える
0

私によると、ロジックを実装するには、2 つではなく 3 つのテーブルが必要です。

私のデータベーススキーマを検討してください

USERS
| id        | autoincrement, primary key
| user_id   | user's ID
| connected | available, connecting, chatting

ROOMS
| id        | 
| room_name | 

USERCHAT
| id        |
| user_id   | user's ID
| room_id   | room id

ペアを取得するには、次のクエリを実行できます。

SELECT user_id 
FROM USERS 
WHERE id NOT IN (SELECT user_id FROM USERCHAT)
ORDER BY RAND()
LIMIT 2;

ユーザーを選択したら、ROOMS および USERCHAT テーブルに簡単に挿入できます。このスキーマを使用すると、チャットで 2 人ではなく複数のユーザーを許可することもできます。

于 2012-10-04T06:08:42.453 に答える