Een record dupliceren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marc

Marc

13/07/2006 02:25:00
Quote Anchor link
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
 
PHP hulp

PHP hulp

17/11/2024 11:41:29
 
Klaasjan Boven

Klaasjan Boven

13/07/2006 08:10:00
Quote Anchor link
Waarom zou je dat willen je data dubbel opslaan?
 
Marc

Marc

13/07/2006 08:47:00
Quote Anchor link
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.
 
Klaasjan Boven

Klaasjan Boven

13/07/2006 09:16:00
Quote Anchor link
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
 
Marc

Marc

13/07/2006 11:55:00
Quote Anchor link
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
 
Willem Jan Z

Willem Jan Z

13/07/2006 11:58:00
Quote Anchor link
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.
 
Marc

Marc

13/07/2006 12:12:00
Quote Anchor link
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
 
Willem Jan Z

Willem Jan Z

13/07/2006 12:21:00
Quote Anchor link
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...
 
Marc

Marc

13/07/2006 15:11:00
Quote Anchor link
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.
 
PHP erik

PHP erik

13/07/2006 15:15:00
Quote Anchor link
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.
Gewijzigd op 01/01/1970 01:00:00 door PHP erik
 
Frank -

Frank -

13/07/2006 15:20:00
Quote Anchor link
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.
 
Marc

Marc

13/07/2006 15:48:00
Quote Anchor link
PhPErik bedankt.

Dit is precies wat ik zocht!
Ik heb het zojuist even in PhPMyAdmin getest en het werkt. (mits ik geen ID mee geef)

Frank:
Dubbele records zijn inderdaad meestal niet wenselijk. De vraag die ik hier stelde maakt deel uit van een groter geheel. Er wordt altijd datum en tijd bijgehouden zodoende zijn de records sowieso nooit helemaal gelijk. En qua overige data is het in dit geval soms de bedoeling dat er gelijke gegevens worden opgeslagen, weliswaar telkens met een ander tijdstempel.

Opgelost dankzij PhPErik! De rest ook bedankt voor de tips!
 



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.