从多表中选择语句

时间:2015-02-19 06:54:18

标签: php mysql sql

我在MySql中有两个表(用户和关注者),我有以下查询:

$sql=" SELECT u.* FROM theUsers u
INNER JOIN Follows ul ON ul.theUserLike = u.userName
WHERE ul.myUsername = '$userName' ORDER BY userName DESC";

上面的sql工作正常,我需要的是运行它并调用除了一个以外的所有用户,这就是我试过的:

$sql=" SELECT u.* FROM theUsers u
INNER JOIN Follows ul ON ul.theUserLike = u.userName
WHERE ul.myUsername = '$userName' AND ul.myUsername <> 'admin' ORDER BY userName DESC";

但结果是空的,希望能找到答案。

3 个答案:

答案 0 :(得分:1)

如果您想要除管理员以外的所有用户,您可以这样做

$sql=" SELECT u.* FROM theUsers u
INNER JOIN Follows ul ON ul.theUserLike = u.userName
WHERE ul.myUsername <> 'admin' ORDER BY userName DESC";

您可以通过$ other_user更改管理员,请注意$ other_user必须与$ userName不同

$sql=" SELECT u.* FROM theUsers u
INNER JOIN Follows ul ON ul.theUserLike = u.userName
WHERE ul.myUsername <> $other_user ORDER BY userName DESC";

答案 1 :(得分:1)

原因是你得到null的原因是,因为你使用AND两个条件都需要为真,如果你的下表包含管理员用户那么你将获得null结果,我看不到如果您的follow表包含不同的用户,为什么你会得到null。

theUsers table

enter image description here

按照表格

follows

只有当theUsers表包含userName theUserLike并且myUsername表中的Follows

时,您的代码才有效
$userName = 'pete';
$sql=" SELECT u.* FROM theUsers u
INNER JOIN Follows ul ON ul.theUserLike = u.userName
WHERE ul.myUsername = '$userName' AND ul.myUsername <> 'admin' ORDER BY userName DESC";

$rst=$mysqli->query($sql);

$data = $rst->fetch_assoc();
while ($data != null) {
    echo $data['userName'];
    $data = $rst->fetch_assoc();
 }
  

输出:pete

答案 2 :(得分:0)

$sql=" SELECT u.* FROM theUsers u
    INNER JOIN Follows ul ON ul.theUserLike = u.userName
    WHERE ul.myUsername <> 'admin' OR  ul.myUsername = '$userName' ORDER BY userName DESC";

这里我们首先检查Not admin条件,然后检查OR条件

的$ userName条件