[MySQL] Woorden vervangen in database*

Pagina: 1
Acties:
  • 1.430 views sinds 30-01-2008
  • Reageer

  • mosymuis
  • Registratie: Maart 2002
  • Laatst online: 21-06 10:15
Ik zoek een manier om in één keer een bepaald URL of een woord in een MySQL database (in één specifieke tabel) te vervangen voor een andere. Misschien dat hiervoor een SQL truc bestaat om in te geven in phpMyAdmin? Of ligt dit lastiger?

Ik kan zelf geen PHP, en Google maakte me ook niets wijzer. "Replace", "database" en "words" kwamen in teveel pagina's voor. ;)

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:10
Heb je het UPDATE statement als eens bekeken?

Wat wil je precies wijzigen? In welk type veld, etc....

https://fgheysels.github.io/


  • mosymuis
  • Registratie: Maart 2002
  • Laatst online: 21-06 10:15
Type veld is TEXT.

LAuWe, dit kan best wel eens zijn wat ik bedoel, maar ik kan er geen wijs uit wat ik nu moet ingeven in phpMyAdmin. Hoe schrijf ik het op als ik woordA wil vervangen voor woordB, in tabel "tabel"?

En kan deze instructie enkele woorden vervangen binnen in een text, zonder de rest van de text aan te tasten?

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 17-08 13:41
idd UPDATE en dan 1 van de string functies. welke mag je zelf uitvogelen ;)

REPLACE is iets anders. Of ja, kan je ook wel gebruiken maar is verre van efficient in dit geval.

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 15-07 20:09

dArtagnan

Een voor allen, allen voor een

Dit komt denk ik aardig in de richting
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$query = "
SELECT id,tekstveld
FROM tabel
WHERE tekstveld LIKE '%woordA%'";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{
  if (preg_match("/woordA/i", $row['tekstveld']))
  {
    // het woord is gevonden
    // nu vervang je overal in tekstveld woordA door woordB met bijvoorbeeld preg_replace
    $query = "
    UPDATE tabel
    SET tekstveld = '".$tekstveld."'
    WHERE id = '".$row['id']."'";
    $result = mysql_query($query);
  }
}

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
bartvb schreef op 19 november 2003 @ 22:16:
idd UPDATE en dan 1 van de string functies. welke mag je zelf uitvogelen ;)

REPLACE is iets anders. Of ja, kan je ook wel gebruiken maar is verre van efficient in dit geval.
REPLACE() is juist precies wat je wilt (niet verwarren met REPLACE). ;)

En vergeet alsjeblieft die tenenkrommende code van Koraalduivel. :P

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 17-08 13:41
bigtree: bijdehand :P
Ik had het idd over REPLACE en niet over replace() ;)

Spul van koraalduivel werkt waarschijnlijk wel maar elegant/efficient is anders ;) Kijk ff naar de eerste link die bigtree geeft ;)

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
bartvb schreef op 19 november 2003 @ 23:51:
Spul van koraalduivel werkt waarschijnlijk wel maar elegant/efficient is anders ;)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$result = mysql_query($query); 
while ($row = mysql_fetch_array($result)) 
{ 
  if (preg_match("/woordA/i", $row['tekstveld'])) 
  { 
    // het woord is gevonden 
    // nu vervang je overal in tekstveld woordA door woordB met bijvoorbeeld preg_replace 
    $query = " 
    UPDATE tabel 
    SET tekstveld = '".$tekstveld."' 
    WHERE id = '".$row['id']."'"; 
    $result = mysql_query($query); 
  } 
}
een resultaat van een update-query alloceren? 8)7
een result-identifier van een vorige select-query overschrijven? 8)7
preg_match om te kijken of een substring voorkomt? 8)7
preg_replace om een simpele substring te vervangen? 8)7
voor elk record een update-query afvuren? 8)7

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 17-08 13:41
hey, ik probeerde een beetje opbouwend kritisch te zijn :P Om te zeggen dat het bagger code is is ook weer zoiets ;)
Iedereen is zo begonnen (ok, behalve ik dan :P).

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
bartvb schreef op 20 november 2003 @ 00:17:
Iedereen is zo begonnen (ok, behalve ik dan :P).
nou noem je hem een beginner :X

Ik prog nu zo'n 12 jaar maar ik heb nog nooit een reguliere expressie gebruikt. Best knap voor een beginner dan! :)

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 17-08 13:41
BTW niet echt veel contact info in je profiel he? :P

Reguliere expressies zijn voor mietjes :P Alles met substr oplossen is veel cooler ;)

Damn, wat is het stil op GoT :/ Begin me te vervelen, valt het op?

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 15-07 20:09

dArtagnan

Een voor allen, allen voor een

bigtree schreef op 20 november 2003 @ 00:04:
[...]
<knip>
een resultaat van een update-query alloceren?
een result-identifier van een vorige select-query overschrijven?
preg_match om te kijken of een substring voorkomt?
preg_replace om een simpele substring te vervangen?
voor elk record een update-query afvuren?
Het kan inderdaad een stuk handiger/makkelijker Het is dan ook een beetje een vlug geschreven stukje. Die preg_match was ook een overbodig, dit gebeurde immers ook al in de query. Op de eerste vier punten ben het inderdaad met je eens.

Maar REPLACE() kun je toch alleen maar geboch niet als je iets wil veranderen in je tabel? Hoe kun je het overal veranderen als je niet meerdere update query's gebruikt?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Maar REPLACE() kun je toch alleen maar geboch niet als je iets wil veranderen in je tabel? Hoe kun je het overal veranderen als je niet meerdere update query's gebruikt?
:?
SQL:
1
2
3
4
5
6
UPDATE
   tabelNaam 
SET
   veld='nieuwewaarde'
WHERE
   veld='oudewaarde';

wanneer je weet dat 'oudewaarde' de volledige veldwaarde is.

SQL:
1
2
3
4
5
6
UPDATE
   tabelNaam 
SET
   veld=REPLACE(veld,'oudewaarde','nieuwewaarde')
WHERE
   veld LIKE '%oudewaarde%';

Als 'oudewaarde' als gedeelte van de veldwaarden voorkomt.


edit:
oh ja nog iets, laten we mekaar hier even niet voor beginner uit gaan lopen maken, dat lijkt me niet echt bijdragen aan de sfeer.

[ Voor 12% gewijzigd door drm op 20-11-2003 15:38 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

code:
1
update tabel set kolom = "nieuwe waarde" where kolom = "oude waarde"


of woorden in waardes:

code:
1
update tabel set kolom = "nieuwe waarde" where kolom LIKE "%oude waarde%"

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
drm schreef op 20 november 2003 @ 15:37:
[...]
SQL:
1
2
3
4
5
6
UPDATE
   tabelNaam 
SET
   veld=REPLACE(veld,'oudewaarde','nieuwewaarde')
WHERE
   veld LIKE '%oudewaarde%';

Als 'oudewaarde' als gedeelte van de veldwaarden voorkomt.
De WHERE clause is overbodig volgens mij. Als 'oudewaarde' niet voorkomt in veld zal het record ook niet worden geupdate. Zie maar:
SQL:
1
2
UPDATE tabel SET kolom1 = kolom1
Getroffen rijen: 0 (Query took 0.0013 sec)
oh ja nog iets, laten we mekaar hier even niet voor beginner uit gaan lopen maken, dat lijkt me niet echt bijdragen aan de sfeer.
Mee eens. Sorry als Koraalduivel het persoonlijk opvatte, ik reageerde alleen op zijn code.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 13:41

GrimaceODespair

eens een tettenman, altijd ...

Ok, niet erg ontopic... sue me:

@BackLash: you make one louzy copycat :P

@bigtree: hoe doe jij dan ingewikkelde input checks zonder regulier expressies? lex? :P (oh nee... da's ook regexp :) )

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

bigtree:
De WHERE clause is overbodig volgens mij. Als 'oudewaarde' niet voorkomt in veld zal het record ook niet worden geupdate. Zie maar:
SQL:
1
2
UPDATE tabel SET kolom1 = kolom1
Getroffen rijen: 0 (Query took 0.0013 sec)
Je uitleg klopt niet helemaal, maar ik snap wel wat je bedoelt ;) Ik weet alleen niet hoe mysql de LIKE's en REPLACE's optimized. Ik kan me nl. voorstellen dat een like sneller is dan een replace, maar dat kan ook onzin zijn.

Maar da's niet helemaal de reden dat ik 'm er bij zet. 't Is meer gewoonte geworden om altijd een WHERE bij een update te zetten omdat je 'm dan ook niet meer vergeet als je 'm stiekem wel nodig hebt :) Ik vermoed dat mensen die "wel eens even gauw wat veranderen" dat fenomeen wel herkennen ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
drm schreef op 21 november 2003 @ 00:35:
[...]
Je uitleg klopt niet helemaal, maar ik snap wel wat je bedoelt ;) Ik weet alleen niet hoe mysql de LIKE's en REPLACE's optimized. Ik kan me nl. voorstellen dat een like sneller is dan een replace, maar dat kan ook onzin zijn.
Zelf vermoed ik ook dat een LIKE sneller is. Die hoeft alleen maar (booelan) te checken of een bepaalde substring voorkomt. Zodra die substring gevonden is, kan hij stoppen met zoeken. Een REPLACE komt er zo makkelijk niet van af.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

bigtree:
Zelf vermoed ik ook dat een LIKE sneller is. Die hoeft alleen maar (booelan) te checken of een bepaalde substring voorkomt. Zodra die substring gevonden is, kan hij stoppen met zoeken. Een REPLACE komt er zo makkelijk niet van af.
Volgens mij snijdt die benadering niet erg hout. Ik denk zelf eerder dat het niet veel uitmaakt, want het verschil tussen 'like' en 'replace' is enkel het punt waarop 'replace' gaat wijzigen in de tekst en like al true/false evalueert. Het eerste gedeelte "tekst opzoeken" kan bijna helemaal hetzelfde zijn, behalve dat REPLACE moet weten wat de plaats van de substring is. Maar ik kan me niet voorstellen dat dat erg veel performanceverschil op zou leveren :)

maar goed ... 8)7

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1