[PHP/MySQL]]Multiple keys na insert achterhalen

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Hallo,

Ik heb een probleempje met het achterhalen van keys na een insert in mysql.
Het is mij bekend dat een idee te achterhalen valt d.m.v. mysql_insert_id().

Nu heb ik een tabel met meerdere keys.

nl.

Tabel: WAYPOINTS
RouteID
Sequence

Edge
Latitude
Longtitude

Waarbij Route en Sequence sleutels zijn.
Ik zou graag de waardes van beide sleutels willen achterhalen.

Is iemand bekend met dit probleem of nog belangrijker; een oplossing hiervoor.

  • GlowMouse
  • Registratie: November 2002
  • Niet online
mysql_insert_id() reotourneert de waarde van het auto_increment veld. Het auto_increment veld moet primaire sleutel zijn, en daarvan heb je er maar een in je tabel. Er kunnen dus nooit twee keys tegelijkertijd gegenereerd worden, je zult er bij je INSERT-query altijd eentje op moeten geven. Wanneer je er zelf eentje opgeeft, hoef je de waarde niet meer apart te achterhalen.

  • Theuno
  • Registratie: Juni 2001
  • Nu online

Theuno

Da Devil Crew

Als je mysql_insert_id() wil gebruiken lost je dat zo op:

code:
1
2
3
4
5
6
7
Tabel: WAYPOINTS
wayp_id (auto_increment)
RouteID
Sequence
Edge
Latitude
Longtitude


Daarmee kan je vervolgens de beide secondary keys opvragen door middel van de primary key van de tabel (wayp_id).

Edit:
Mochten er veel andere acties tegelijk op de database uitgevoerd worden, dan is het aan te raden om in dit soort gevallen eerst de tabel te locken:

PHP:
1
2
3
4
mysql_query("LOCK TABLES WAYPOINTS WRITE");
<HIER JE EIGEN QUERY>
mysql_insert_id();
mysql_query("UNLOCK TABLES");

[ Voor 34% gewijzigd door Theuno op 22-02-2007 12:44 ]

Theuno - Da Devil Crew - Een programmeur is iemand die koffie omzet in software...
Nu nog betere koffie...


Verwijderd

Ehmm die Sequence insert je toch neem ik aan?? Dan weet je hem toch al? (als je geen mysql functies gebruikt, zal ie anders gelijk moeten zijn aan ID en daarmee betekenisloos)

  • mithras
  • Registratie: Maart 2003
  • Niet online
Je hebt inderdaad nog een SELECT query nodig om de sequence te achterhalen bij een insert wanneer je dus je routeId terug krijgt :)

Mm, kromme zin: als je een insert doet krijg je de routeId terug. Je hebt dus nog een query nodig die de sequence ophaalt bij de zojuist inserted routeId. Ervan uitgaande dat je routeId een auto_increment heeft.

[ Voor 8% gewijzigd door mithras op 22-02-2007 16:59 ]


  • Theuno
  • Registratie: Juni 2001
  • Nu online

Theuno

Da Devil Crew

mithras schreef op donderdag 22 februari 2007 @ 16:58:
Mm, kromme zin: als je een insert doet krijg je de routeId terug. Je hebt dus nog een query nodig die de sequence ophaalt bij de zojuist inserted routeId. Ervan uitgaande dat je routeId een auto_increment heeft.
Ik ben er even vanuit gegaan dat je ze allebei niet weet, waarvoor je dus een extra id toevoegd die voor die tabel elke entry uniek maakt. Als dat al zo is is het natuurlijk niet nodig om deze toe te voegen.

Een mogelijke oplossing heb je nu dus. Is dit toereikend voor jou probleem ? Anders laat ons iets meer weten over de scope van het probleem.

Theuno - Da Devil Crew - Een programmeur is iemand die koffie omzet in software...
Nu nog betere koffie...

Pagina: 1