DELETE INSETR en de controle via e-mail

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johan Maas

Johan Maas

07/12/2007 14:57:00
Quote Anchor link
Onderstaans script wordt elke laatste van de maand automatisch uitgevoerd.
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)
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
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);
 }

?>
 
PHP hulp

PHP hulp

17/05/2024 19:36:09
 
Joren de Wit

Joren de Wit

07/12/2007 15:02:00
Quote Anchor link
Waarom gebruik je aparte tabellen voor leden en oudleden? Het verschil tussen deze twee berust enkel op status en normaal gesproken zou je gewoon 1 tabel met leden hebben met daarin een kolom die de status aangeeft...

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.
 
Johan Maas

Johan Maas

07/12/2007 15:13:00
Quote Anchor link
Dat weet ik, maar dan moet ik in elke nieuwe configuratie met leden enz rekening houden met de status. Daarom verplaatsen en verwijderen.
Gewijzigd op 01/01/1970 01:00:00 door Johan Maas
 
Frank -

Frank -

07/12/2007 15:16:00
Quote Anchor link
Tja, zoals Blanche reeds meldt, een fout datamodel.

'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.
 
Joren de Wit

Joren de Wit

07/12/2007 15:20:00
Quote Anchor link
Johan schreef op 07.12.2007 15:13:
Dat weet ik, maar dan moet ik in elke nieuwe configuratie met leden enz rekening houden met de status.
En wat is daar het probleem van? Kwestie van 'AND status=$$' aan je queries toevoegen (waarbij $$ de status aangeeft)...

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
 



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.