ik ben bezig met een boekingsysteem. Daar heb ik 2 tabelen:
een tabel met de gegevens van wie het en opmerkingen:
boek_id | naam | opmerkingen
en een tabel met de ruimtes en tijden
id | boek_id | datum | ruimte(1,2,3) | dagdeel (1,2,3,4)
hoe ga ik nu met een query kijken op welke datums in de komende 3 maanden geen ruimte is om te boeken. dus dat die hele dag op elk dagdeel alle ruimtes bezet zijn??
Ik denk dat ik al wel wat weet, moet alleen nog bedenken hoe om te zetten naar een query.
-> Het werkt met een SUBQUERY, maar dat moet geen probleem zijn. Ervanuit gaande dat elke dag 4 mogelijke intekentijden heeft, kan je met een COUNT query bepalen welke ruimtes vol zijn, door het aantal keren dat een op een dag een ruimte is gereserveerd.
Wanneer COUNT(datum) (gegroepeerd op datum) 12 is, dan is alles volgeboekt op die dag. Dan moet je alleen nog die datum door de query halen die ik hiervoor noemde.
Ik kom hierop terug.
SELECT
COUNT(datum) AS aantal,
datum
FROM
ruimtes
WHERE
datum IN
(SELECT
datum
FROM
ruimtes
WHERE
datum
BETWEEN
CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTHS))
AND aantal = 12
GROUP BY datum
Dit is een hersenspinsel van me voor dit probleem, ik heb het niet getest. Het 1e deel werkt sowiezo wel, de count en de group by icm de subquery zal wel werken, maar of die "AND aantal = 12" werkt durf ik niet te zeggen.
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MONTHS))
AND aantal = 12
GROUP BY datum at line 15
Als je "AND aantal=12" eens weghaald, wat doet die dan? Dan geeft die denk ik van de komende 3 maanden alle aantallen uit je ruimtereserveringen? (de count)
Volgens mij moet het namelijk zonder die regel wel werken, maar dan heb je nog niet in je query bepaald of de ruimtes vol zijn.
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MONTHS))
en als je de S achter MONTHS weghaald werkt het wel, maar dan zit je nog met de aantallen. Dit kan je eventueel in PHP controleren, maar het mooiste zou zijn als we dit voor elkaar kregen in SQL.
Ik heb net even jou tabelletje nagebouwd, ik krijg wel resultaten. Deze query gebruikte ik:
SELECT COUNT( datum ) AS aantal, datum
FROM ruimtes
WHERE datum
IN (
SELECT datum
FROM ruimtes
WHERE datum
BETWEEN CURDATE( )
AND DATE_ADD( CURDATE( ) , INTERVAL 3
MONTH )
)
GROUP BY datum