On duplicate key (last modifield id)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Joep

Joep

05/12/2007 14:25:00
Quote Anchor link
Hallo database gebruikers :P

Ik heb een query en ik wil a de query weten welk id hij heeft aangepast. het is een:

INSERT INTO
blablabl
ON DUPLICATE KEY
UPDATE

constructie..Normaal zou je LAST_INSERT_ID() om je id op te vragen, nu kan het ook natuurlijk een update worden, dus kan ik niet van die functie uitgaan.

Is er dus een functie die mij het record id kan teruggeven, negerend of het nu een insert of update is.
 
PHP hulp

PHP hulp

24/11/2024 11:12:45
 
Frank -

Frank -

05/12/2007 14:44:00
Quote Anchor link
Ik heb m'n twijfels of het kan, je zou eens met LAST_INSERT_ID() kunnen gaan stoeien.

Maar, ik zou deze constructie niet in m'n SQL willen hebben, ik zou de INSERT gewoon laten mislukken en dan besluiten om een UPDATE uit te voeren. Dat geeft je meer controle over wat er precies gebeurt en het werkt ook met andere databases. Daarnaast bestaat er, in theorie, een kans dat de UPDATE plaatsvindt op basis van het id, gebruik per ongeluk een TINYINT voor je ID en na 127 of 255 records zal iedere keer het hoogste id worden bijgewerkt zonder dat je dat direct doorhebt. Je kunt niet aangeven op basis van welke constraint de update moet plaatsvinden.

INSERT => error => SELECT (achterhalen wát er fout gaat) => evt. UPDATE, afhankelijk van de geconstateerde fout.
 
Robert Deiman

Robert Deiman

05/12/2007 14:45:00
Quote Anchor link
@Joep

Als je een duplicate key hebt, moet je dus op een key controleren. Die key heb je dan al opgeslagen ergens in je script in een variabele.

Anders is het ook altijd mogelijk om de bewerkte data op te halen, met een SELECT query, daarvoor heb je ook de gegevens wel in je scriptje staan (in variabelen)
 
Joep

Joep

05/12/2007 16:01:00
Quote Anchor link
Frank je hebt zoiezo gelijk daarin. Het gaat hier om systeem wat we voor mensen moeten aanpassen en willen het men zo min mogelijk php code aanpassen en daarom dat ik dat er misschien een functie bestond in SQL die zoiets kon opvangen.

# robert, er staat niks in mijn code, ik insert namelijk en on dup key update ik meteen. Heb ook niet de var die ik nodig heb. Ik wil namelijk de id en die bestaat nog niet.

edit: gevonden oplossing

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
<?
 $a_query_data
['s_sql'] .= "
                                    -- Insert or update new/existing relations
                                    INSERT INTO    "
. $s_join_table . "
                                        (
                                             "
. $i_master_id1 . "
                                            ,"
. $i_master_id2 . "
                                        )
                                        VALUES
                                        (
                                             "
. $aOptions['s_key_value'] . "
                                            ,"
. $i_relation_key . "
                                        )
                                    ON DUPLICATE KEY
                                    UPDATE i_id = LAST_INSERT_ID(i_id)
                                    ;
                                    SET @i_registration_id := LAST_INSERT_ID();
                                "
;
?>


Je verzint het niet, maar het werkt wel...
Gewijzigd op 01/01/1970 01:00:00 door Joep
 
Frank -

Frank -

05/12/2007 16:07:00
Quote Anchor link
Hij is lekker vies!

Maar het doel is bereikt, dat is vaak ook wel wat waard.
 



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.