ik heb 2 tabellen: events en beschikbaar.

In de tabel beschikbaar wordt een userid opgeslagen en de eventid's waarvoor de user zich beschikbaar zet.

nu wil ik met een query alle events weergeven waarvoor de user zich niet opgegeven heeft.

Dit is mijn sql tot nu toe:

SELECT events.id, events.title, events.start, events.end, beschikbaar.userID, beschikbaar.eventID FROM events left join beschikbaar on events.id = beschikbaar.eventID where beschikbaar.userID <> 6 OR beschikbaar.eventID is null


Het probleem dat ik hier heb is dat, indien een andere user zich opgegeven heeft voor hetzelfde event, dit ook in het resultaat staat, en dat wil ik niet.

in de linker tabel zouden dus enkel de events mogen staan waarvoor de user zicht niet heeft opgegeven, in de rechter tabel komen de events waarvoor de user zich wel heeft opgegeven


Weet iemand hoe ik dit kan realiseren?
Even voor de duidelijkheid: deze query zou dus de events moeten weergeven waarvoor een specifieke gebruiker zich wel of niet beschikbaar heeft gesteld, correct?

Daarbij: de "tabellen" waar je het in de eerste paragraaf over hebt zijn database-tabellen, maar de "tabellen" waar je het in de voorlaatste paragraaf over hebt zijn HTML-tabellen die je weergeeft ofzo?

Het probleem waar je mogelijk tegenaan liep was dat op het moment dat je in je WHERE-conditie zet welk user(id) het betrof, dat je dan niet de events in de resultaten te zien kreeg waarvoor die user zich niet had opgegeven.

Wat je waarschijnlijk in plaats hiervan moet doen is dit opnemen in de (LEFT) JOIN-conditie zelf. Dan wanneer je de resultaten uitleest kijk je of het beschikbaar.userID NULL is of niet, en op grond daarvan zet je deze in de beschikbaar/niet beschikbaar lijst.

Dus zoiets (moet mogelijk nog getweaked worden):
SELECT events.id, events.title, events.start, events.end, beschikbaar.userID, beschikbaar.eventID
FROM events
LEFT JOIN beschikbaar
ON (events.id = beschikbaar.eventID AND beschikbaar.userID = <het user id waarin je geïnteresseerd bent>)
Bedankt,

ik heb het met u reactie kunnen oplossen.



Reageren