如何从表中选择未链接到其他表的行?

时间:2018-12-17 12:56:43

标签: php mysql sql pdo combobox

我有2张桌子:

用户

------------------------------------
| id (PK) | password | name | role |
------------------------------------

-------------------------------------------
| dogid (PK) | userid (FK : id) | dogname |
-------------------------------------------

我制作了一个表格,您可以将一个用户链接到一只狗,但是每个用户只能有一只狗。我制作了一个组合框,您可以在其中选择一个用户,以将其链接到一条狗。可行

<?php
    $sql = "SELECT * FROM users INNER JOIN dogs ON users.username = dogs.userid WHERE users.role = 'dogowner' ORDER BY name";
    $stmt = $con->prepare($sql);
    $stmt->execute();
    $result = $stmt->fetchAll();
?>
<select id="gebrid" name="gebrid">
    <?php foreach($result as $pers): ?>
    <option value="<?= $pers['username']; ?>"><?= $pers['name']; ?></option>
    <?php endforeach; ?>
</select>

上面的代码选择所有具有“ dogowner”角色的用户。我想要第二个WHERE条件,该条件仅选择没有狗的用户。

这是否可行,还是我必须更改数据库?

3 个答案:

答案 0 :(得分:0)

使用left join并添加dogs.userid IS NULL

SELECT users.* 
FROM users 
LEFT JOIN dogs ON users.id = dogs.userid 
WHERE users.role = 'dogowner'
  AND dogs.userid IS NULL
ORDER BY users.name

答案 1 :(得分:0)

像这样吗?

function open(){
    x=document.getElementById("demo");
    x.style.display="block";
}

这应该为您提供在dogs表的userid列中没有ID的所有用户。

答案 2 :(得分:0)

对于您的描述(= 1个用户只能有1条狗),DB应该是:

用户

------------------------------------------------
| id (PK) | password | name | role | dogid (FK)|
------------------------------------------------

------------------------
| dogid (PK) | dogname |
------------------------

然后

SELECT * FROM USERS WHERE DogID IS NULL