DELETE INSETR en de controle via e-mail
Wat er gebeurd staat er bij vemeld.
Gegevens oudleden kunnen niet dubbel worden het lidnummer is INT Prim.
Dit werkt, maar er is geen controle.
Ik zou ook een e-bericht willen krijgen als het gelukt cq mislukt is.
Zijn er iedeen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
// alle kolommen van tabel leden, selecteer de rijen, die voldoen aan, veld lideind ingevuld en is groter dan 1980-08-28 en kleiner dan nu.
$query = "SELECT * FROM leden WHERE lideind > 1980-08-28 AND lideind < NOW()";
$resultaat = mysql_query($query) or die ("Fout in query:$query. " . mysql_error());
while ( $rij = mysql_fetch_array($resultaat) )
{
$lidnummer = $rij['id'];
// Zet lidgegevens in oudleden.
$insert_lid = "INSERT INTO oudleden (id, enz.)
VALUES ('$rij[id]', enz.')";
$resultaat_insert = mysql_query($insert_lid);
// verwijder lid uit leden
$verwijder_lid = "DELETE FROM leden WHERE id = $lidnummer";
$resultaat_verwijderen = mysql_query($verwijder_lid);
// verwijder lid uit users
$verwijder_user = "DELETE FROM users WHERE lidnummer = $lidnummer";
$resultaat_verwijderen = mysql_query($verwijder_user);
}
?>
// alle kolommen van tabel leden, selecteer de rijen, die voldoen aan, veld lideind ingevuld en is groter dan 1980-08-28 en kleiner dan nu.
$query = "SELECT * FROM leden WHERE lideind > 1980-08-28 AND lideind < NOW()";
$resultaat = mysql_query($query) or die ("Fout in query:$query. " . mysql_error());
while ( $rij = mysql_fetch_array($resultaat) )
{
$lidnummer = $rij['id'];
// Zet lidgegevens in oudleden.
$insert_lid = "INSERT INTO oudleden (id, enz.)
VALUES ('$rij[id]', enz.')";
$resultaat_insert = mysql_query($insert_lid);
// verwijder lid uit leden
$verwijder_lid = "DELETE FROM leden WHERE id = $lidnummer";
$resultaat_verwijderen = mysql_query($verwijder_lid);
// verwijder lid uit users
$verwijder_user = "DELETE FROM users WHERE lidnummer = $lidnummer";
$resultaat_verwijderen = mysql_query($verwijder_user);
}
?>
Het enige dat je dan hoeft te doen is een simpele update query uitvoeren om de status van een lid te veranderen. Geen problemen dus meer met delete queries die je wilt gaan uitvoeren.
Gewijzigd op 01/01/1970 01:00:00 door Johan Maas
'oud' is een eigenschap van een record, geen soort data. De data die oud is (en wat is oud?), kan dus onmogelijk in een andere tabel staan.
En voordat je gaat roepen dat je teveel records in je tabel krijgt, een miljoen records meer of minder, maakt niet echt veel indruk op een database. Daarvoor zul je toch echt nog iets meer records moeten hebben. In pgSQL kun je in 1 tabel al 9.223.372.036.854.775.807 records kwijt (probeer dit eens uit te spreken...), wanneer je tabellen van elkaar laat erven, kun je een onbeperkt aantal records kwijt. Het enige probleem dat je hebt, is een gebrek aan opslagruimte, een flink aantal schijven zul je wel nodig hebben.
Johan schreef op 07.12.2007 15:13:
En wat is daar het probleem van? Kwestie van 'AND status=$$' aan je queries toevoegen (waarbij $$ de status aangeeft)...Dat weet ik, maar dan moet ik in elke nieuwe configuratie met leden enz rekening houden met de status.
Liever dat dan het vergroten van het risico op corrupte data in je database. Aangezien je geen transacties gebruikt, gebeurt het met jouw bovenstaande script heel snel dat leden zowel in de leden als de oudleden tabel voorkomen. De deletequery hoeft namelijk maar 1x te mislukken en dan heb je de poppen al aan het dansen...
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit