Avatar billede gil-galad Nybegynder
13. august 2005 - 23:48 Der er 11 kommentarer og
1 løsning

Søg og Erstat i MySQL?

Hej

Jeg har en stor tabel (ca. 200.000 rækker)
desværre er nogle af data'erne forkerte i en af kolonnerne, og jeg har derfor brug for en slags søg og erstat funktion, som findes i bl.a. notepad.

Der kunne fx. stå:
index.php?fisk=aborre&fiskestang=5

her skal &fiskestang=t slettes. Men jeg ved ikke hvad tallet er. Så man kan sige at at &fiskestang= og alt efter skal slettes.

Men hvordan kan jeg mon gøre det?
Lave et dump, og lade et windows-program om det? Hvilket?

Serveren kører PHP, hvis det kan løses på den måde
Avatar billede arne_v Ekspert
13. august 2005 - 23:52 #1
lige netop den rettelse må kunne laves som:

UPDATE tabel SET felt = SUBSTRING(felt, 1, LOCATE('&fiskestang=', felt))
Avatar billede arne_v Ekspert
13. august 2005 - 23:53 #2
husk at teste på test data inden du zapper 200000 rækker !!!!
Avatar billede gil-galad Nybegynder
14. august 2005 - 00:53 #3
tester i morgen.

Men tak for hjælpen!
Avatar billede gil-galad Nybegynder
14. august 2005 - 16:18 #4
Nu har jeg testet det, men det virker nu ikke helt efter planen...

Min kode:
<?php
require("filer/connect_counter.php");
mysql_query("UPDATE test SET side = SUBSTRING(side, 1, LOCATE('&PHPSESSID=', side))");
mysql_close();
?>

Lige nu sletter den alle felter hvor "&PHPSESSID=" ikke står i, og dem det står i, sletter den kun "&PHPSESSID=" altså ikke &'et.

Hvad gør jeg galt?
Avatar billede gil-galad Nybegynder
14. august 2005 - 16:38 #5
jeg er kommet lidt tættere på nu:

$fyord = "&PHPSESSID=";
mysql_query("UPDATE test SET side = SUBSTRING(side, 1, LOCATE('&PHPSESSID=', side)) WHERE side LIKE '%$fyord%'");

nu finder den kun de rigtige steder og sletter, men den erstatter &PHPSESSID=584539hf9734ft47fb3tfg  med et &, så det kommer til at stå sidst. Det skal også væk!
Avatar billede arne_v Ekspert
14. august 2005 - 18:19 #6
er det ikke bare at trække 1 fra ?
Avatar billede arne_v Ekspert
14. august 2005 - 18:19 #7
$fyord = "&PHPSESSID=";
mysql_query("UPDATE test SET side = SUBSTRING(side, 1, LOCATE('&PHPSESSID=', side)-1) WHERE side LIKE '%$fyord%'");
Avatar billede gil-galad Nybegynder
14. august 2005 - 18:55 #8
det virker!

Men jeg har endnu et problem. der er lidt mere der skal behandles, men det er kun enkelte ord som:
//index.php    som skal skiftes md:
/index.php

og &amp; med &

Kunne du give et eksempel på sådan en?
Avatar billede arne_v Ekspert
14. august 2005 - 18:59 #9
UPDATE tabel SET felt = REPLACE(felt,'//','/')

UPDATE tabel SET felt = REPLACE(felt,'&amp;','&')

vil jeg tro
Avatar billede gil-galad Nybegynder
14. august 2005 - 19:39 #10
tak.

Det er godt nok utroligt at det ikke tager mere tid at søge sådan en stor tabel igennem. Det tog jo ikke engang så lang tid, at man kunne se siden blinkede.

Men smider du et svar??
Avatar billede arne_v Ekspert
14. august 2005 - 19:42 #11
kommer her
Avatar billede gil-galad Nybegynder
14. august 2005 - 19:50 #12
Tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester