Voor een project ben ik bezig met php en mysql en ben ik met behulp van o.a. google tot onderstaande situatie uitgekomen waar ik even vastloop.
Even een schets van de situatie:
Ik heb 2 tabellen in mijn database: 'factuurgegevens' en 'betalingen'.
Tussen deze twee tabellen heb ik een relatie aangemaakt met het veld 'userid' in betalingen naar 'id' in 'factuurgegevens'.
In de tabel 'betalingen' worden, zoals de naam al aangeeft, betalingen toegevoegd.
Een voorbeeld van een betaling waarin 'userid' 6 een betaling heeft gedaan op 06-04-2007 over het jaar 2006:
id | datum | bladnmr | jaar | userid
12 | 06-04-2007 | blad1 | 2006 | 6
Nu heb ik een query gemaakt om alle users uit de database te halen welke betaald hebben over een bepaald jaar:
Deze query geeft de verwachte resultaten weer: alle users die betaald hebben in bijvoorbeeld het jaar 2007. Nu wil ik echter ook alle users tonen welke nog niet betaald hebben in een bepaald jaar.
Deze query geeft ook de verwachte resultaten, behalve wanneer een user meerdere betalingen heeft gedaan. Ik krijg meerdere keren dezelfde userid terug, wat ik er uit filter in php. Alleen wanneer een user een betaling heeft gedaan, in bijvoorbeeld 2006 en 2007, wil ik dat deze niet in de resulaten voorkomen (hij of zij heeft immers betaald in 2007), maar deze komen nu wel in de resultaten voor.
Iemand hier die mij een duwtje in de goede richting kan geven?
Even een schets van de situatie:
Ik heb 2 tabellen in mijn database: 'factuurgegevens' en 'betalingen'.
Tussen deze twee tabellen heb ik een relatie aangemaakt met het veld 'userid' in betalingen naar 'id' in 'factuurgegevens'.
In de tabel 'betalingen' worden, zoals de naam al aangeeft, betalingen toegevoegd.
Een voorbeeld van een betaling waarin 'userid' 6 een betaling heeft gedaan op 06-04-2007 over het jaar 2006:
id | datum | bladnmr | jaar | userid
12 | 06-04-2007 | blad1 | 2006 | 6
Nu heb ik een query gemaakt om alle users uit de database te halen welke betaald hebben over een bepaald jaar:
code:
1
2
3
4
5
| SELECT factuur.id, factuur.naam, factuur.adres, factuur.huisnummer, factuur.postcode, factuur.plaats, factuur.categorie, betaal.jaar FROM factuurgegevens AS factuur LEFT JOIN betalingen AS betaal ON betaal.userid = factuur.id AND betaal.jaar ='.$_GET['jaar_1'] WHERE betaal.jaar != NULL |
Deze query geeft de verwachte resultaten weer: alle users die betaald hebben in bijvoorbeeld het jaar 2007. Nu wil ik echter ook alle users tonen welke nog niet betaald hebben in een bepaald jaar.
code:
1
2
3
4
5
| SELECT factuur.id, factuur.naam, factuur.adres, factuur.huisnummer, factuur.postcode, factuur.plaats, factuur.categorie, betaal.jaar FROM factuurgegevens AS factuur LEFT JOIN betalingen AS betaal ON betaal.userid = factuur.id AND betaal.jaar !=2007 OR betaal.jaar = NULL |
Deze query geeft ook de verwachte resultaten, behalve wanneer een user meerdere betalingen heeft gedaan. Ik krijg meerdere keren dezelfde userid terug, wat ik er uit filter in php. Alleen wanneer een user een betaling heeft gedaan, in bijvoorbeeld 2006 en 2007, wil ik dat deze niet in de resulaten voorkomen (hij of zij heeft immers betaald in 2007), maar deze komen nu wel in de resultaten voor.
Iemand hier die mij een duwtje in de goede richting kan geven?