Scoutnet vzw

We connect scouts!
Het is momenteel 17 Nov 2024 11:50

Alle tijden zijn UTC + 1 uur




Plaats een nieuw onderwerp Reageren op dit onderwerp  [ 5 berichten ] 
Auteur Bericht
BerichtGeplaatst: 22 Apr 2005 9:01 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 27 Sep 2004 23:00
Berichten: 661
Hallo,

ik vraag mij af of je 1 enkel sql statement kan gebruiken om meerdere records uit meerdere tabellen verwijderen...

Een vb ? :p
- Gebruiker (gegevens vd gebruiker)
- GebruikerComments (commentaar bij het profiel vd gebruiker)
- GebruikerPosts (commentaar die de gebruiker bv geeft op een forum/gastenboek)

Ik wil nu alle records deleten van die gebruiker ...
Dit is maar een voorbeeld maar bij mij gaat het over een tabel of 10, dusja liever in 1 statement dan ;)

THX A LOT!!


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 22 Apr 2005 15:42 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 22 Jan 2004 0:00
Berichten: 773
Hmm, dat kan zeker in sommige databases (der is zelfs een naam voor), maar ik weet niet of het kan in MySql... FF googlen misschien?


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 22 Apr 2005 15:43 
Offline
Site Admin
Site Admin
Gebruikers-avatar

Geregistreerd: 17 Jul 2002 23:00
Berichten: 1522
Woonplaats: Wetteren
Ik heb het zelf nog niet gebruikt, maar ik veronderstel wel dat het gaat. Dus maar even opgezocht en dit is wat ik gevonden heb op de site van MySQL:
MySQL Reference Manual :: 13.1.1 DELETE Syntax schreef:
From MySQL 4.0, you can specify multiple tables in the DELETE statement to delete rows from one or more tables depending on a particular condition in multiple tables. However, you cannot use ORDER BY or LIMIT in a multiple-table DELETE.

The first multiple-table DELETE syntax is supported starting from MySQL 4.0.0. The second is supported starting from MySQL 4.0.2. The table_references part lists the tables involved in the join. Its syntax is described in Section 13.1.7.1, “JOIN Syntax”.

For the first syntax, only matching rows from the tables listed before the FROM clause are deleted. For the second syntax, only matching rows from the tables listed in the FROM clause (before the USING clause) are deleted. The effect is that you can delete rows from many tables at the same time and also have additional tables that are used for searching:

DELETE t1, t2 FROM t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id;

Or:

DELETE FROM t1, t2 USING t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id;

These statements use all three files when searching for rows to delete, but delete matching rows only from tables t1 and t2.

The examples show inner joins using the comma operator, but multiple-table DELETE statements can use any type of join allowed in SELECT statements, such as LEFT JOIN.


To


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 23 Apr 2005 15:00 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 22 Jan 2004 0:00
Berichten: 773
Heb gevonden hoe het heet: cascaded delete.

Het kan zelfs simpeler dan met een uitgebreid delete statement. Als je InnoDB kiest als table type kan je FOREIGN KEY Constraints opgeven. Je kan dan kiezen om bij een delete de database volgende acties uit te voeren:

# Je mag een rij in de one tabel pas weggooien als er geen gerelateerde many rows meer zijn.
# Bij het verwijderen van een row in de one tabel gooit het RDBMS automatisch alle gerelateerde gegevens in de many tabel weg. Dit heet een cascaded delete.
# Bij het verwijderen van de laatste 'many' gooit het RDBMS automatisch de gerelateerde 'one' row weg.

Voor meer info: http://dev.mysql.com/doc/mysql/en/innod ... aints.html
en natuurlijk ook:
http://www.google.be/search?q=mysql+cascaded+delete


Omhoog
 Profiel  
 
 Titel:
BerichtGeplaatst: 25 Apr 2005 15:21 
Offline
 
 
Gebruikers-avatar

Geregistreerd: 31 Jul 2002 23:00
Berichten: 236
Eigenlijk ben je in dit geval best af met 10 apparte SQL-instructies, maar dat wil niet zeggen dat je voor elke gebruiker die je wist 10 instructies moet gaan aanpassen en uitvoeren.
Je kan bevoorbeeld gebruik maken van een tabel 'GEBRUIKERS2DELETE' waarin je de gebruikers-id bijhoud van de records die je wil verwijderen.

Je schrijft de 10 Deletes op basis van die tabel in een php-script of tekstbestand dat je uitvoert via PHPMyadmin. De laatste instructie is het leegmaken van de tabel ''GEBRUIKERS2DELETE' .

Caygull.


Omhoog
 Profiel  
 
Berichten weergeven van de afgelopen:  Sorteer op  
Plaats een nieuw onderwerp Reageren op dit onderwerp  [ 5 berichten ] 

Alle tijden zijn UTC + 1 uur


Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 6 gasten


U mag geen nieuwe onderwerpen plaatsen in dit forum
U mag geen reacties plaatsen op onderwerpen in dit forum
U mag uw berichten niet wijzigen in dit forum
U mag uw berichten niet verwijderen in dit forum
U mag geen bijlagen plaatsen in dit forum

Zoeken naar:
Ga naar:  
cron
Powered by phpBB® Forum Software © phpBB Group
Vertaald door phpBBservice.nl.