Hallo Tweakers, eerste post hier.. Zit met de handen in het haar over hoe ik het volgende op kan lossen in MySQL. Hopelijk kan iemand me een zetje in de goede richting geven.
Ik ben een online inschrijfsysteem aan het maken, dat bestaat uit een vijftal tabellen te weten:
Invites
invite_id (PK/AI)
location_id (FK)
group_id (FK)
[..]
groups
group_id (PK/AI)
group_name
locations
location_id (PK/AI)
location_name
tours
tour_id (PK/AI)
location_id (FK)
tour_name
attendance
tour_id (FK)
invite_id (FK)
Het systeem gaat over het volgende. Mijn opdrachtgever organiseert een evenement op 2 locaties (tabel locations) waarvoor hij gasten uit wil nodigen (tabel invites) en online hun aanwezigheid op te nemen (tabel attendance).
De gasten geven hun aanwezigheid op door zich in te schrijven voor een tour. Een tour is een rondleiding waarvan er meerdere op een dag plaatsvinden. Als een invite aanwezig is, heeft deze zich dus ingeschreven voor een tour en komt deze terug in de koppeltabel attendance. Tot zo ver alles prima.
Waar het lastig begint te worden is dat deze tours gecapt worden met een hoeveelheid X bezoekers. Dus indien tour A een bezoekersaantal heeft van 40, moet deze uit niet meer uit de database worden gevist als zijnde beschikbaar. Bezoekers moeten hier namelijk niet meer op in kunnen schrijven; hij zit vol.
Wat ik dus zal moeten doen is data uit de tabel tours selecteren op basis van locatie_id en het aantal inschrijvingen (dmv count()?) in de tabel attendance met het corresponderende tour_id. Indien deze de cap overschrijden dan wil ik deze tour niet meer in m'n resultaat hebben.
De tabel groups is overigens voor verschillende permissies. Er zijn namelijk bezoekers en leveranciers die beiden van het inschrijfsysteem gebruik zullen gaan maken.
Alle hulp is welkom, alvast bedankt
Edit: wat ik zelf al heb geprobeerd..
SELECT tours.tour_id, tours.name, count(attendance.tour_id) AS count_tours
FROM tours, attendance
WHERE (tours.tour_id = attendance.tour_id)
HAVING count_tours < 20
Dit geeft me een resultaat van alle tours waar <20 inschrijvingen voor bestaan.
Wat ik natuurlijk wil is alleen de tours waar nog ruimte beschikbaar is, en dus ook die waar geen inschrijvingen voor zijn.
Ik ben een online inschrijfsysteem aan het maken, dat bestaat uit een vijftal tabellen te weten:
Invites
invite_id (PK/AI)
location_id (FK)
group_id (FK)
[..]
groups
group_id (PK/AI)
group_name
locations
location_id (PK/AI)
location_name
tours
tour_id (PK/AI)
location_id (FK)
tour_name
attendance
tour_id (FK)
invite_id (FK)
Het systeem gaat over het volgende. Mijn opdrachtgever organiseert een evenement op 2 locaties (tabel locations) waarvoor hij gasten uit wil nodigen (tabel invites) en online hun aanwezigheid op te nemen (tabel attendance).
De gasten geven hun aanwezigheid op door zich in te schrijven voor een tour. Een tour is een rondleiding waarvan er meerdere op een dag plaatsvinden. Als een invite aanwezig is, heeft deze zich dus ingeschreven voor een tour en komt deze terug in de koppeltabel attendance. Tot zo ver alles prima.
Waar het lastig begint te worden is dat deze tours gecapt worden met een hoeveelheid X bezoekers. Dus indien tour A een bezoekersaantal heeft van 40, moet deze uit niet meer uit de database worden gevist als zijnde beschikbaar. Bezoekers moeten hier namelijk niet meer op in kunnen schrijven; hij zit vol.
Wat ik dus zal moeten doen is data uit de tabel tours selecteren op basis van locatie_id en het aantal inschrijvingen (dmv count()?) in de tabel attendance met het corresponderende tour_id. Indien deze de cap overschrijden dan wil ik deze tour niet meer in m'n resultaat hebben.
De tabel groups is overigens voor verschillende permissies. Er zijn namelijk bezoekers en leveranciers die beiden van het inschrijfsysteem gebruik zullen gaan maken.
Alle hulp is welkom, alvast bedankt
Edit: wat ik zelf al heb geprobeerd..
SELECT tours.tour_id, tours.name, count(attendance.tour_id) AS count_tours
FROM tours, attendance
WHERE (tours.tour_id = attendance.tour_id)
HAVING count_tours < 20
Dit geeft me een resultaat van alle tours waar <20 inschrijvingen voor bestaan.
Wat ik natuurlijk wil is alleen de tours waar nog ruimte beschikbaar is, en dus ook die waar geen inschrijvingen voor zijn.
[ Voor 9% gewijzigd door Verwijderd op 25-03-2011 10:00 ]