У меня есть 3 таблицы:
stoffen
-------------------
| pot (PK) | naam |
-------------------
| 1 | dust |
| 2 | iron |
| 3 | gold |
-------------------
stoftesten
-----------------------------------------------------------------------
| id (PK) | score | done | stofid (FK : pot) | userid (FK : username) |
-----------------------------------------------------------------------
| 1 | 75 | Ja | 1 | user01 |
| 2 | 25 | Ja | 2 | user01 |
| 3 | 85 | Ja | 2 | user02 |
-----------------------------------------------------------------------
Пользователи
-------------------------------------------
| username (PK) | name | rol | basis |
-------------------------------------------
| user01 | Ben | geleider | VLB |
| user02 | Tom | geleider | GER |
-------------------------------------------
Все эти 3 таблицы используются в этом запросе:
SELECT *
FROM stoffen
INNER JOIN stoftesten ON stoffen.pot = stoftesten.stofid
INNER JOIN users ON users.username = stoftesten.gebruikersid
WHERE stoftesten.done = 'Ja' and users.username = '$pers->username'
ORDER BY naam";
Составляет список всех «stoffen», которые связаны с «stoftest». user01 получает список с пылью и железом, а user02 - список с железом.
Мне было интересно, есть ли способ составить список предметов, которых нет в этом списке, список неиспользуемых предметов. Итак, я сделал это:
SELECT *
FROM stoffen
LEFT JOIN stoftesten ON stoffen.pot = stoftesten.stofid
LEFT JOIN users ON users.username = stoftesten.gebruikersid
WHERE stoftesten.gedaan IS NULL
ORDER BY stoffen.naam;
Это создает список, который я хотел, по крайней мере, так я и думал. Когда я вхожу в другую учетную запись, я получаю тот же список «нет в списке». Это понятно, потому что я не указал ни одного пользователя.
Но я не могу найти способ сделать это. Таблица «stoftesten» связывает «stoffen» и «пользователей». Есть ли способ показать только «stoffen», которых нет в списке, но разные для каждого пользователя?