met 1 query uit 2 tabellen verwijderen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

W W

W W

12/03/2007 13:24:00
Quote Anchor link
Hi, ik ben een klein systeempje aan het maken waarbij ik 2 tabellen heb.

Tabel 1: Hier staat alle informatie in van de klanten
Tabel 2: De toegevoegde problemen met een kolom (TID, dit is het id van de klant die het heeft toegevoegd.)

Elk probleem & klant heeft een ID. Nu wil ik het zo maken dat als je een klant verwijderd je ook meteen in Tabel 2 alle problemen verwijderd waar TID gelijk is aan $_GET['id'].

Moet ik dat dan in 2 keer doen? of hoe kan ik dat in 1 query aanpakken?

Pepijn
Gewijzigd op 01/01/1970 01:00:00 door W W
 
PHP hulp

PHP hulp

20/11/2024 11:23:32
 
Robert Deiman

Robert Deiman

12/03/2007 13:28:00
Quote Anchor link
Als je MySQL 5 hebt met de InnoDB engine dan kan het met 1 query. Ik denk echter dat je de MyISAM engine gebruikt (vaak standaard), dus dat houd in dat je dan wel in 2 keer moet doen, een DELETE query werkt niet met een JOIN heb ik getest.
Dus je zal toch moeten zorgen dat je of de InnoDB engine gaat gebruiken, of overstappen op een ander type (postgresql) database als je echt wil dat je het met 1 query kan doen.
 
Frank -

Frank -

12/03/2007 13:30:00
Quote Anchor link
Stel de foreignkey op de juiste manier in, met name de ON DELETE is van belang.

Uiteraard gebruik je de InnoDB-engine of nog beter PostgreSQL.
 
Joren de Wit

Joren de Wit

12/03/2007 13:30:00
Quote Anchor link
Dit doe je niet met behulp van php. Als je met een goed datamodel werkt zorg je namelijk voor een foreign key constraint op de 'klanten' tabel in de 'problemen' tabel (TID dat dus naar ID van de klant verwijst). Zo'n constraint is het eenvoudigst aan te maken met behulp van bijvoorbeeld phpmyadmin.

Met behulp van dat constraint kun je aangeven wat er moet gebeuren als er een klant verwijderd wordt. Let er wel op dat je, als je mysql gebruikt, de InnoDB engine moet gebruiken.

Zie ook de mysql handleiding voor meer informatie over een foreign key constraint.

Edit:
Hehe, nog sneller typen :)
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
W W

W W

12/03/2007 13:36:00
Quote Anchor link
@allen, ik gebruik gewoon de standaard MyISAM, ik ben nog niet zo ervaren met mysql. Het is GEEN must om het in 1 query te doen. Dit leek mij gewoon makkelijk. Maar ik kan dus ook gewoon 2x een query uitvoeren?

of met ik dan met AND o.i.d gebruiken?

Edit:


Dus zoiets?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);

$sqlklant = "DELETE * FROM hd_klanten WHERE id = '" . $_GET['id'] . "'";
$resklant = mysql_query($sqlklant) OR die mysql_error());
$sqlprobleem = "DELETE * FROM hd_geschiedenis WHERE tid = '" . $_GET['id'] . "'";
$resprobleem = mysql_query($sqlprobleem) OR die mysql_error());

    if ($resklant == TRUE && $resprobleem == TRUE)
        {

        echo 'Klant is succesvol uit het database verwijderd.';
        }
else {
        echo 'Het verwijderen is mislukt.';
        }

?>

Gewijzigd op 01/01/1970 01:00:00 door W W
 
Joren de Wit

Joren de Wit

12/03/2007 13:40:00
Quote Anchor link
Eigenlijk is het WEL een must om je foreign key constraints op de juiste manier in te stellen. Dit voorkomt namelijk dat jij met een corrupte database komt te zitten. Het zou namelijk zomaar kunnen dat je met een niet helemaal netjes gescript systeem op een gegeven moment records in de problemen tabel hebt staan die verwijzen naar een klant die niet meer bestaat...

Als je toch deze constraint niet wilt gebruiken, kijk dan eens naar de DELETE syntax, daar staat ook de syntax beschreven voor het verwijderen uit meerdere tabellen.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Frank -

Frank -

12/03/2007 13:44:00
Quote Anchor link
Quote:
ik gebruik gewoon de standaard MyISAM, ik ben nog niet zo ervaren met mysql
Ervaring en MyISAM hebben inderdaad een hoop met elkaar te maken en dan vooral het begrip 'slechte ervaring'. In MyISAM is het namelijk een fluitje van een cent om met 1 query jouw hele database-inhoud naar de bliksem te helpen. MyISAM doet namelijk geen enkele poging om de data te beschermen!

Gebruik dus altijd InnoDB (mocht je ondanks alle problemen met MySQL toch MySQL willen gebruiken...) om een database op te zetten. Dat je nog niet helemaal lekker met de foreignkeys kunt omgaan, geeft niks, dat komt vanzelf wel.
 
W W

W W

12/03/2007 13:47:00
Quote Anchor link
Ok, kun je mij een simpel voorbeeldje geven met InnoDB? hoe je ze maakt en hoe je er data inzet?
 



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.