Sorry voor de wellicht ongelukkige titel.

Ik heb een database met 2 tabellen: gedichten, reacties

Die zijn aan elkaar gelinkt met gedicht_id

Nu heb ik in het verleden als luiheidsoplossing wel eens een gedicht verwijdert door het gewoon uit tabel gedicht te verwijderen.

Met als gevolg dat de eventuele reacties nog steeds in de tabel reacties staan. En nergens maar aan gelinkt worden.

Is het mogelijk die te verwijderen. Logisch gezien zou ik bij elke reactie kunnen checken of de gedicht_id nog in de tabel gedichten staat.

Maar ik weet niet goed hoe hier aan te beginnen? als er geen link meer is met de tabel gedichten is het NULL? En als die conditie er is, dan verwijder ik het maar?

Ben bezig aan een scriptje om bij het verwijderen van gedichten, ook direct de reacties te verwijderen. redelijk eenvoudig maar niet meer van toepassing op de vroegere fout die ik maakte.
Dit is een duidelijk resultaat van een verkeerd opgezet datamodel. Hoewel je normalisatie wel goed zal zijn, heb je geen onderline restricties aangebracht op de tabellen door middel van foreign keys.

Had je dit wel gedaan, dan is het met een bepaalde instelling bijvoorbeeld niet mogelijk om gedichten te verwijderen terwijl er nog reacties bij dat gedicht horen. Verder zou je met een andere instelling bij het verwijderen van een gedicht er direct voor kunnen zorgen dat alle bijbehorende reacties ook verwijderd worden.

Om het probleem nu op te lossen zou je een query als deze kunnen gebruiken:

DELETE FROM reacties
WHERE gedicht_id NOT IN (
    SELECT id
    FROM gedichten )
Door middel van foreign keys? Zal mezelf eens proberen wat bij te scholen...

Valt dit nog op te lossen?
ja, handmatig verwijderen of alle gelinkte id's zoeken en alles verwijderen wat niet gelinkt is.
Ja dit is me gelukt met de code van Blanche.. Maar had het over een foreign key invoegen..
Ja dat kan, met als voorwaarde dat je de InnoDB engine van MySQL gebruikt. Dat is namelijk de enige engine waarbij dat mogelijk is.
Zou je het persoonlijk zelf doen? Het gaat hier in het slechtste geval over een reactie, en een vote die niet meer gelinkt is... nu is het myISAM...
Ja, persoonlijk zou ik het zelf altijd doen. Je voorkomt hiermee namelijk dat je corrupte data in je database krijgt...

Reageren