webForumDet fria alternativet

byta plats på fältinnehåll.

Databaser & SQL

8 svar · 285 visningar · startad av ConnyFox

Medlem sedan aug. 20011 087 inlägg
Frågan#1

Ok jag hade en bugg i min webshop som ställde till med att personnr (t.ex 840206-xxxx) och email (t.ex apa@apa.nu) hamnade i varandras vält i databasen på vissa ställen.

hur gör jag för att byta tillbaka på ett smidigt vis?!
kanske hör bättre hemma i asp?!

Medlem sedan dec. 1999707 inlägg
#2

Nåt sånt här månne?

UPDATE
Tabell
SET
PersonNr = Epost,
Epost = PersonNr

Medlem sedan mars 20034 471 inlägg
#3

toha skrev:

Nåt sånt här månne?

UPDATE
Tabell
SET
PersonNr = Epost,
Epost = PersonNr

Det där skulle inte jag våga pröva (med mindre än att LarsG eller något annat vandrande lexikon ;) skrev det)! Rimligtvis sätter väl SQL den ena posten först, och då blir det liktydigt med:
PersonNr = Epost,
Epost = Epost // För det står ju då i personnummer enligt föregående kommando.

Dessutom skrev ConnyFox att sammanblandningen skett på "vissa ställen", medan ovanstående förslag byter överallt! :o

Jag tror att jag skulle skrivit ut värdena och ändrat rad för rad om det inte är hundratals rader det rör sig om. (Alltså genom att ange värdena.)

Medlem sedan dec. 200012 464 inlägg
#4

Det skall fungera att göra så enligt SQL-standarden. Dock har t.ex. Mysql (förvånad?) gjort fel i sin implementation då de gör så som aasah beskriver.

Medlem sedan aug. 20011 087 inlägg
#5

jo men om det där funkar e det ju bara o lägga till en where bla bla.. men funkar det tro? :D

Medlem sedan mars 20034 471 inlägg
#6

Enligt LarsG ("det vandrande lexikonet ;)"):
Det funkar inte om du har MySQL.
Det SKA funka enligt standard.

Så frågan är, vad har du för databas? Följer den standard?

Medlem sedan dec. 1999707 inlägg
#7

Ok kan ju bara kolla om det ligger ett '@' i personnr-fältet och byta ut de raderna.

Självklart ska man inte köra den update-satsen utan att testa först. Starta en transaktion, kolla hur det ser ut och rulla tillbaka. När det verkar funka kör man bara update-satsen.

BEGIN TRAN

UPDATE
	Person
SET
	PersonNr = Epost,
	Epost = PersonNr
WHERE
	PersonNr LIKE '%@%'

SELECT * FROM Person WHERE PersonNr LIKE '%@%'

ROLLBACK TRAN
Medlem sedan aug. 20011 087 inlägg
#8

jag använder mysql, antar det inte funkar då.. damnit.. hur skall jag då göra? :D

Medlem sedan dec. 19995 874 inlägg
#9

Gäller det samtliga poster? I så fall kan du ju enkelt byta namn på fältet.

I annat fall kan du skapa en tempkolumn, eller en temptabell kanske är ännu smidare. Skyffla datan dit. Gör ändringen på den kolumnen du inte har sparad och flytta sedan från din temptabell till kolumnen där det skall vara. Men allt beror på förutsättningar, vad du vet och hur många poster det gäller etc.

255 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)