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

时间:2012-10-04 05:39:57

标签: php mysql

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

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

我有以下数据库结构。

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

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

3 个答案:

答案 0 :(得分: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 =房间号。

编辑:

以下是一种使用两个随机用户

更新会议室记录的方法
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

答案 1 :(得分: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);

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

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