Ik ben bezig met de volgende uitbreiding op mijn dochter's achtbanenteller. Het komt regelmatig voor dat we een achtbaan tegenkomen dat hetzelfde model is als een achtbaan reeds eerder toegevoegd aan de lijst. Dit wordt door de kenners een "clone" genoemd. Aangezien we inmiddels zoveel van deze clones zijn tegengekomen, leek het me leuk een relatie tussen deze te maken in de database. Hiervoor heb ik een tabel aangemaakt genaamd "clones" met daarin 2 kolommen namelijk:
- achtbaanid_1
- achtbaanid_2
(ja ik had wellicht ook achtbaanid en cloneid kunnen gebruiken)
Het idee is om originele id in te voegen als achtbaanid_1 met de clone als achtbaanid_2, een één op meer relatie dus. Ik wil deze echter 2 kanten op kunnen query-en, m.a.w. als ik het origineel op vraag wil ik een lijst met clones, maar als ik een clone op vraag, wil ik een lijst met andere clones inclusief het origineel.
Zover zo goed. Ik gebruik nu echter 2 queries waarvan ik me afvroeg of dat niet makkelijker kan:
- SELECT * FROM clones WHERE achtbaanid_1=?
- SELECT * FROM clones WHERE achtbaanid_1=(SELECT achtbaanid_1 FROM clones WHERE achtbaanid_2=?) AND achtbaanid_2!=?
De eerste levert bij het origineel een lijst met clones op (en wordt bij een clone dus overgeslagen).
De tweede levert bij een clone een lijst met clones op (en wordt bij het origineel dus overgeslagen).
Probleem bij de tweede query is alleen dat het origineel niet wordt meegenomen terwijl ik deze wél in de lijst wil als ik een clone toon. Simpele oplossing zou zijn om het origineel in te voegen als zijnde clone (m.a.w. achtbaanid_1=achtbaanid_2), maar kan dit niet handiger? Kan het zelfs niet met 1 query i.p.v. 2?
Benieuwd naar jullie gedachten.
5.416 views