我目前有一个查询以大多数钱显示我游戏中的顶级用户。
$q = mysqli_query($link, "SELECT `money`, `name`, `id` FROM `users` WHERE `money` > 0 ORDER BY `money` DESC LIMIT 10");
$r = 1;
while($row = mysqli_fetch_assoc($q)) {
//Code here.
++$r;
}
其中$r
是用户的等级(1-10)。
我要做的是过滤掉目前在游戏中被禁止的用户。 users
表中没有关于用户是否被禁止的列,但是有一个单独的bans
表,如下所示:
bans
`id` INT(11) PRIMARY AUTO-INCREMENT
`user` INT(11)
`reason` TEXT
`length` INT(11)
user
表中的bans
值与id
表中的users
值完全相同。
我正在尝试过滤掉bans
表中存在的第一个查询中的所有用户。
答案 0 :(得分:1)
您必须使用left join
:
SELECT `money`, `name`, ´users`.`id` FROM `users` left join `bans` on user.id = bans.user WHERE bans.is is null and`money` > 0 ORDER BY `money` DESC LIMIT 10");
答案 1 :(得分:1)
您可以使用not exists
查询,例如:
SELECT `money`, `name`, `id`
FROM `users` u
WHERE `money` > 0
AND NOT EXISTS (SELECT 1 FROM Bans b WHERE b.user = u.id)
ORDER BY `money` DESC
LIMIT 10
这会将被禁用的用户从我认为你想要的结果中删除 - 如果是相反的方法,只需删除not
。