DELETE from 2 tables

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mr.Ark

Mr.Ark

24/04/2009 21:54:00
Quote Anchor link
Beste Mensen,

Mijn excuses dat ik ALWEER hulp moet vragen.
Zit weer met het volgende probleem.

Probeer in 1 query gegevens uit 2 tabellen te deleten.
dit was me gelukt, Alleen als tabel 2 geen gegevens bevatte dan wou het delete van tabel 1 niet.

Het volgende ziet er zo uit: (voorbeeld)

Tabel - 1

ID - Primary Key
Rest informatie is niet van belang.

Tabel 2

ID - Primary Key
Tabel 1 ID

Zoals je ziet sla ik het ID van tabel 1 op in tabel 2.

Nu zou ik graag hulp willen hebben hoe ik deze query goed kan krijgen zodat vanuit alle 2 de tabellen het wordt gedelete. Ook al zit er in tabel 2 geen informatie, Dan nog moet hij hem uit tabel 1 deleten.

Hopelijk heb ik het kunnen uitleggen en kan iemand mij hiermee helpen. (Ben zooooo slecht in query's opbouwen.)

Met vriendelijke groet,

ark
 
PHP hulp

PHP hulp

22/12/2024 11:36:26
 
Noppes

Noppes

24/04/2009 22:01:00
Quote Anchor link
Probeer in 1 query gegevens uit 2 tabellen te deleten.
Verkeerd idee!

En je kan het eventueel oplossen met een ON DELETE CASCADE
 
Mr.Ark

Mr.Ark

24/04/2009 22:04:00
Quote Anchor link
@ Noppes

Dus ik kan het beste het in 2 query's doen?
 
Mark PHP

Mark PHP

24/04/2009 22:23:00
Quote Anchor link
Nee, absoluut niet.

Wat Noppes (hopelijk) bedoeld is, dat je dit gedrag in je datamodel moet vastleggen (door middel van Foreign Keys).

Meer hier.
 
Mr.Ark

Mr.Ark

24/04/2009 22:35:00
Quote Anchor link
Ik snap de "link" niet echt met de ON DELETE CASCADE.

CREATE TABLE parent (id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (id INT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE CASCADE
) ENGINE=INNODB;

Dit voorbeeld staat daar.
Dus als je een delete query uitvoert via de tabel child and je delete parent_id dan wordt automatisch ook de tabel parent gedelete met het opgegeven id?

Maar wat nou als je nou uit de tabel parent een delete uitvoert, Hoe weet hij dan wat hij uit de andere tabellen moet verwijderen?

En wat nou als je uit meer tabellen moet verwijderen?

Voorbeeld:

Gebruiker 1

Heeft info in news staan, Heeft info in nog iets anders staan, En heeft info in weer iets anders staan.
Als je dan gebruiker 1 delete hoe moet mysql dan weten hoe die die andere gegevens moet deleten?

/* Edit */

Is dit de veiligste manier? Of maakt het niet zoveel uit als er records achterblijven in een database? Word je database op den duur toch vol van?
Gewijzigd op 01/01/1970 01:00:00 door Mr.Ark
 
Roel -

Roel -

24/04/2009 23:06:00
Quote Anchor link
Werkt 2 query's echt niet?
 
Mr.Ark

Mr.Ark

25/04/2009 00:03:00
Quote Anchor link
@ Roel

2 query's zal wel lukken.
Vroeg me gewoon af of het mogelijk was om het in 1 query te doen.
Opzich wil het wel met USING, Alleen als dan tabel 2 geen waarde bevat, dan delete hij het deel van tabel 1 ook niet.
 
Willem Jan Z

Willem Jan Z

25/04/2009 00:07:00
Quote Anchor link
ark schreef op 24.04.2009 22:35:
Dit voorbeeld staat daar.
Dus als je een delete query uitvoert via de tabel child and je delete parent_id dan wordt automatisch ook de tabel parent gedelete met het opgegeven id?

Nee, precies andersom. Als je de parent verwijdert, worden alle children verwijdert. Je hebt niks aan een child zonde bestaande parent (denk bv aan submenu's)

ark schreef op 24.04.2009 22:35:
Maar wat nou als je nou uit de tabel parent een delete uitvoert, Hoe weet hij dan wat hij uit de andere tabellen moet verwijderen?
Door die foreign keys, er is een koppeling met die tabel.

ark schreef op 24.04.2009 22:35:
En wat nou als je uit meer tabellen moet verwijderen?
Hoezo uit meer tabellen? Als jij in meerdere tabellen een foreign key maakt naar diezelfde parent, worden, als je die parent verwijdert, alle records uit alle tabellen,die ernaar verwijzen, verwijdert.

ark schreef op 24.04.2009 22:35:
Voorbeeld:
Gebruiker 1
Heeft info in news staan, Heeft info in nog iets anders staan, En heeft info in weer iets anders staan.
Als je dan gebruiker 1 delete hoe moet mysql dan weten hoe die die andere gegevens moet deleten?

Daar moet je niet over nadenken :P Dat weet hij gewoon. MySQL slaat gewoon ergens op welke relaties er zijn.

ark schreef op 24.04.2009 22:35:
/* Edit */
Is dit de veiligste manier? Of maakt het niet zoveel uit als er records achterblijven in een database? Word je database op den duur toch vol van?
Een database krijg jij niet zomaar vol. Als jij elke dag 10.000 records toevoegd, en dat 50 jaar doet, heb je 180 miljoen records. Dan is je database nog steeds niet vol. Ook al moet je dan wel wat meer moeite doen om je database snel te houden (zoals INDEXes, FOREIGN KEYS, etc)
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
 
Mr.Ark

Mr.Ark

25/04/2009 00:32:00
Quote Anchor link
@ WillemJan

Bedankt voor je reactie.
Ik moet me echt eens meer gaan verdiepen in het goed creeren van een database.

Heb nog even een vraagje.

Wat zou ongeveer het max aantal Query's zijn voor een uitgebreide website?
Dan bedoel ik daarmee:

- Nieuws Systeem + Comment systeem
- Admin Systeem
- User Systeem (Met change password etc...)
- Nog wat andere dingen
 
Willem Jan Z

Willem Jan Z

25/04/2009 00:42:00
Quote Anchor link
Moeilijk te zeggen. Ik zou namelijk zeggen, zo min mogelijk. Zoals je zelf al zei, ga je verdiepen in databases. Leer ze kennen en begrijpen. Leer met JOINS werken, probeer queries die je normaal in 2x of meer keer deed in 1 keer te doen.

Je moet het bijvoorbeeld zo zien: Als je informatie uit meerdere tabellen nodig hebt, maar die relatie is 1 op 1 (bijvoorbeeld een gebruiker bij een nieuwsbericht) is in 1 query al die informatie op te halen. Als je meerdere resultaten bij 1 ding wilt vinden, zoals alle tags bij een nieuwsbericht, worden het al snel 2 queries. Probeer wel te vermijden dat je queries in een loop (while, foreach etc) gaat uitvoeren. 9 van de 10 keer is dat niet nodig en onverstandig. Aangezien een database informatie veel sneller ophaalt dan bijvoorbeeld PHP, is het vaak sneller om iets in 2 queries te doen, waarbij je in de 2e query veel meer informatie ophaalt dan nodig, dan dat je die 2e query in een loop zet en dus in theorie 100en queries kan uitvoeren.
 
Mr.Ark

Mr.Ark

25/04/2009 00:49:00
Quote Anchor link
Nogmaals bedankt WillemJan !

Dus ik hoef me nog niet zorgen te maken om mijn 50 Query's?
 
Willem Jan Z

Willem Jan Z

25/04/2009 00:59:00
Quote Anchor link
Op zich niet, maar verbeteren kan altijd. Wat voor queries zijn het? Wat doen ze?
50 is opzich al vrij veel, zeker omdat voor een nieuws en comment systeem + users check toch geen 10 queries nodig zijn lijkt me?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.