Как выбрать строки из таблицы, которые не связаны с другой таблицей? - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть 2 таблицы:

пользователей

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

собак

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

Я сделал формугде вы можете связать пользователя с собакой, но у каждого пользователя может быть только 1 собака.Я сделал комбобокс, где вы можете выбрать пользователя, чтобы связать его с собакой.Это работает

<?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>

Приведенный выше код выбирает всех пользователей с ролью «владелец собаки».Я хочу второе условие ГДЕ, которое выбирает только пользователей без собаки.

Возможно ли это, или мне придется изменить базу данных?

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Как-то так?

SELECT * 
FROM users 
WHERE id NOT IN (SELECT userid 
                 FROM dogs)

Это должно дать вам всех пользователей, у которых нет идентификатора в столбце ИД пользователя в таблице собак.

0 голосов
/ 17 декабря 2018

Для вашего описания (= 1 пользователь может иметь только 1 собаку), БД должно быть:

Пользователи

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

Собаки

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

затем

SELECT * FROM USERS WHERE DogID IS NULL
0 голосов
/ 17 декабря 2018

Используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...