根据其他表删除结果

时间:2015-08-15 18:08:23

标签: mysql sql

我目前有一个查询以大多数钱显示我游戏中的顶级用户。

$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表中存在的第一个查询中的所有用户。

2 个答案:

答案 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