我正在尝试通过从数据库中随机选择它们然后使它们不可用(因此无法再次选择)来创建一个将两个可用用户配对的应用程序。
我想知道如何选择它们然后配对它们?
我有以下数据库结构。
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
我不是在制作房间,我只是试图将用户配对并送到房间。
答案 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表即可。使用此架构,您还可以允许多个用户而不是两个用户进行聊天。