[php/mysql] hoe wegschrijven in database

Pagina: 1
Acties:
  • 129 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ik heb even een vraag over hoe ik iets het beste in een MySQL database kan wegschrijven.

Ik heb een script geschreven om kaarten mee te bestellen voor een feest over een aantal maanden (lekker op tijd ;) ).

Nu geef je bij alle bestellingen een contactpersoon op, en vervolgens voor de kaarten ook gegevens voor wie de kaarten zijn (alles gaat op naam ivm met vergunning en we willen weten wie er komen)

Dus je hebt een contactpersoon en namen per kaart.

Nu moet ik dit alles in de database proppen, ik dacht aan een tabel met contactpersonen en een tabel met alle kaarten, welke middels een id gelinkt zijn aan het contactpersoon.

Maar hoe schrijf ik dit in een keer weg? Dus eerst de contactpersoon oid en dan het id van dat record opvragen en dat tijdens het inserten van de kaarten er bijvoegen..
Waar ik ook aan dacht was eerst de contactpersoon apart wegschrijven, maar als iemand dan halverwege stopt heb je data waar je niets aan hebt..
Een uniek nummer genereren als je begint met bestellen zou ook kunnen, maar hoe zorgt je er voor dat die altijd uniek is en waar houdt je dat bij (ook in je database)?

Iemand hier ideeen over of wel eens met dit bijltje gehakt?

Acties:
  • 0 Henk 'm!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 05-09 14:30

DizzyWeb

Ondertiteld

Je moet het inderdaad niet per stap gaan wegschrijven, dan ga je veel meuk overhouden, of je moet alles weer gaan verwijderen na afloop.

Handigste is om te doen wat je eerst zegt:
Eerst de contactpersonen wegschrijven en de ID's daarvan opslaan, dan de kaart invoegen, mat de ID's die je hebt opgeslagen.

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
ja idd, maar hoe haal ik in 1 stap die id's naar boven? dat is een stap die ik ff niet kan bedenken..is er een manier om die direct weer terug te krijgen.

edit:


mysql_insert_id() returns 0 if the previous query does not generate an AUTO_INCREMENT value. If you need to save the value for later, be sure to call mysql_insert_id() immediately after the query that generates the value.

This will do the trick denk ik... Maar stel dat 2 mensen tegelijk bestellen op het zelfde moment?

[ Voor 54% gewijzigd door ViNyL op 24-05-2006 11:26 ]


Acties:
  • 0 Henk 'm!

  • KappuhH
  • Registratie: Augustus 2004
  • Niet online
Je kunt je op je tabel een autoincrement zetten, dan krijgt iedereen waarde die je in je tabel voegt een appart id (als je de kolom id noemt). Als je die op beide tabellen zet en in beide tabellen tegelijk een waarde toevoegt zal het idee per toegevoegde waarde altijd gelijk zijn. (Tklink misschien ingewikkeld maar is het niet)

Waarom trouwens niet alles in 1 tabel?

edit:

Je kunt ook zelf een autoincrement maken. Je haalt het id van het laatst toegevoegde item op, telt daar 1 bijop, slaat het op zoals DizzyWeb zegt en dat opgeslagen id gebruik je dan later weer in de andere tabel. Opslaan kan denk ik het beste dmv een sessie als je php gebruikt. Let er dan wel op dat als iemand 2x een kaart besteld het oude id niet voor het nieuwe kaartje gebruikt word, dus op het eind van het bestellen ff de sessie destroyen.

[ Voor 39% gewijzigd door KappuhH op 24-05-2006 11:28 ]


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
KappuhH schreef op woensdag 24 mei 2006 @ 11:24:
Waarom trouwens niet alles in 1 tabel?
Dacht dat het zo netter zou zijn, contact personen in 1 en de kaarten apart ...

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

KappuhH schreef op woensdag 24 mei 2006 @ 11:24:
Waarom trouwens niet alles in 1 tabel?
Omdat we hier met een 1:N relatie te maken hebben. Logisch gevolg is een tabel met contact personen en een tabel met kaarten met hierin een FK naar contact personen.

mysql_last_insert_id functie is trouwens speciaal bedoeld om mogelijke race problemen op te vangen wanneer er 2 mensen tegelijk een kaartje bestellen. Deze vraagt de laatste auto increment sleutel op binnen 1 connectie. Wanneer er 2 scripts tegelijk runnen zijn er 2 connecties die elk hun eigen last insert id bijhouden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
aah ok, dat was het enige waar ik nog even bang voor was, maar dan gaat deze manier dus geen rare problemen opleveren...

dus:

inserten van contactpersoon

id opvragen van insert contactpersoon

inserten van kaarten + id contactpersoon

Mijn dank is groot!
Pagina: 1