met 1 query uit 2 tabellen verwijderen
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
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.
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
of met ik dan met AND o.i.d gebruiken?
Edit:
Dus zoiets?
Dus zoiets?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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.';
}
?>
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
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
Quote:
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!ik gebruik gewoon de standaard MyISAM, ik ben nog niet zo ervaren met mysql
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.
Ok, kun je mij een simpel voorbeeldje geven met InnoDB? hoe je ze maakt en hoe je er data inzet?