我需要从"用户"中选择随机user_id
如果当前用户有任何正在进行的"表格,则完全排除任何user_id
与他战斗battles.status
查询:
SELECT user.id
FROM user
LEFT JOIN battles b ON b.uid = user.id AND b.status <> 'ongoing'
WHERE user.id <> 1
ORDER BY RAND( )
LIMIT 1
但是查询还不够,因为用户可以与特定的其他用户进行多次战斗,其中一个用户正在进行&#34;正在进行&#34;和其他人#34;完成&#34;, 我的查询应该从&#34;完成&#34;中选择用户行。
表格结构:
用户表:
id name
1 John
2 Sarah
3 Jack
4 Andy
5 Rio
战斗表:
id uid uid2 status
1 1 2 finished
2 1 2 ongoing
3 2 3 ongoing
4 1 4 finished
5 3 5 finished
如果&#34;我的&#34; id =&#34; 1&#34;,
我想完全排除我与他持续战斗的任何用户,例如&#34; 2&#34;在上述情况下并接受所有其他ID(即3,4和5)
答案 0 :(得分:1)
你可能想要这样的内容:
SELECT foe.*
-- Select yourself and join all other users to find potential foes
FROM `user` AS me
INNER JOIN `user` AS foe
ON (me.id <> foe.id)
-- Here we select the active user
WHERE me.`id` = 1
-- Now we exclude foes we have ongoing battles with
-- (your id could be in either uid or uid2)
AND foe.`id` NOT IN (
SELECT `uid` FROM `battles`
WHERE `uid2` = me.`id` AND `status` = 'ongoing'
UNION ALL
SELECT `uid2` FROM `battles`
WHERE `uid` = me.`id` AND `status` = 'ongoing'
);
这将返回您当前没有正在进行战斗的用户列表。您可以自定义此选项以使用LIMIT和随机排序返回其中一个,如示例所示。