Is er een MySQL instructie waarmee ik een specifiek record kan dupliceren? (ID moet natuurlijk wel anders worden).

Voorbeeld:
tabel voor duplicatie van rij 3
id | naam | adres | plaats
-------------------------------------
1 | Jan | Bosstraat | Hengelo
2 | Piet | Kerkweg | Den Haag
3 |Klaas | Dorpstraat | Linne

tabel na de duplicatie van rij 3
id | naam | adres | plaats
-------------------------------------
1 | Jan | Bosstraat | Hengelo
2 | Piet | Kerkweg | Den Haag
3 | Klaas | Dorpstraat | Linne
4 | Klaas | Dorpstraat | Linne


Hoe doe ik dit tot op heden:
Nu lees ik alle veldwaardes uit. Sla deze op in een variabele en insert een nieuwe row met de opgeslagen waardes.

Wanneer er echter iets verandert aan de structuur van mijn tabel (veld erbij) dan moet ik tekens in de dupliceer functie alles mee aanpassen. Dit kan vast makkelijker.

Misschien iets in de geest van:

DuplicateRow * FROM tbl_test WHERE id =3

Groet Marc
Waarom zou je dat willen je data dubbel opslaan?
Het is een handigheidje voor de gebruiker. Hij of zij kan een vergelijkbaar dossier opzoeken en kopïëren om daarna die gegevens aanpassen die nodig zijn. Uiteindelijk zijn er dan toch verschillende records. De gebruiker hoeft alleen niet meer zoveel in te voeren.

De werkelijke tabel maakt deel uit van een dossierregistratie waarbij de verschillende dossiers slechts op enkele punten afwijken. Het telt +/- 45 velden.

Als ik het zo lees kun je beter iets met UPDATE doen.
oftwel je haalt de data uit de DB.
Toont deze op het scherm met daarbij een linkje.
Als mensen op de link klikken krijgen ze een <form> met de te wijzigen data en een knop om de wijzigingen door te voeren.
Als ze op de knop gedrukt hebben en je hebt de ingevoerde data gecontroleerd draait er een UPDATE scriptje
Let op. Het is niet de bedoeling om de originele bestaande regel aan te passen.
Maar om een nieuwe bijna gelijke regel in te voegen.

Voorbeeld:
tabel vóór duplicatie van rij 3


id | naam | adres | plaats
-------------------------------------
1 | Jan | Bosstraat | Hengelo
2 | Piet | Kerkweg | Den Haag
3 |Klaas | Dorpstraat | Linne


tabel NA de duplicatie van rij 3

id | naam | adres | plaats
-------------------------------------
1 | Jan | Bosstraat | Hengelo
2 | Piet | Kerkweg | Den Haag
3 | Klaas | Dorpstraat | Linne
4 | Klaas | Dorpstraat | Linne




tabel NA het aanpassen van het duplicaat

id | naam | adres | plaats
-------------------------------------
1 | Jan | Bosstraat | Hengelo
2 | Piet | Kerkweg | Den Haag
3 | Klaas | Dorpstraat | Linne
4 | Henk | Dorpstraat | Linne

Dan zou ik het alsnog anders doen, ongeveer de manier van KlaasJan maar het INSERTEN ipv UPDATEn.

Het idee:
Je leest de data van die ene rij uit, en zet het in een formulier. Je laat alleen de naam leeg, die vullen ze dan in, en jij INSERT de nieuwe rij.
Beste Willem-Jan.

De door u voorgestelde werkwijze is gelijk aan mijn huidige werkwijze met dat verschil dat ik de gegevens niet in een formulier laad, maar in een aantal variabelen plaats. Hierna voer ik een insert uit waarbij de waarden uit de variabelen worden geschreven.

Het probleem is echter dat ik telkens variabelen (of in uw idee formulier elementen) moet bij maken wanneer een veld aan de database wordt toegevoegd.

Is het niet mogelijk om een record op basis van het ID aan te wijzen en MySQL de opdracht te geven dit record volledig te kopiëren. (Nog een keer opslaan in de database)?

Daarna kan ik in het nieuwe record gegevens wijzigen met UPDATE

Zie ook het startbericht van dit topic.

Alvast bedankt,
Marc
Nee, mijn manier is niet gelijk aan die van jouw, jij slaat hem eerst op in de database en gaat hem daarna aanpassen. Is het niet vele logischer stap 2 en 3 samen te voegen? (Dus het toevoegen en aanpassen van het record)

Maar een rij dupliceren lijkt me niet mogelijk zonder moeilijke te doen...
Ja, nu zie ik het verschil. Goed idee.

Overigens blijft overeind, dat het formulier op de database aangepast moet worden. Wellicht dat ik dit met een lusje kan laten oplossen. Eerst de tabel definitie uitlezen en dan automatisch per veld en veldtype een element op het formulier plaatsen.

Ik ga experimenteren.
Bedankt.
INSERT INTO tabel SELECT * FROM tabel WHERE id = 3

edit: misschien moet je niet * doen maar alle velden op 'id' na, omdat hij anders misschien id=3 toevoegt in plaats van doortelt.
Tip: Maak de combinatie van alle velden (exclusief het id) UNIQUE. Dan kan iemand onmogelijk dezelfde gegevens nog een keer opslaan. Dat wil je echt niet hebben in je database, deze is dan corrupt.

Reageren