使用PHP选择并配对两个用户

问题描述 投票:0回答:3

我正在尝试通过从数据库中随机选择它们然后使它们不可用(因此无法再次选择)来创建一个将两个可用用户配对的应用程序。

我想知道如何选择它们然后配对它们?

我有以下数据库结构。

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

我不是在制作房间,我只是试图将用户配对并将它们发送到一个房间。

php mysql
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。

编辑:

这是一种使用两个随机用户更新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

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);

虽然您可能想要锁定行,但我还没有掌握数据库管理的这一部分。为了您的目的,您可能想要查看它。


0
投票

据我说,你需要三个表而不是两个来实现你的逻辑。

考虑我的数据库架构

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表即可。使用此架构,您还可以允许多个用户而不是两个用户进行聊天。

© www.soinside.com 2019 - 2024. All rights reserved.