MYSQL SET REPLACE naam waar een ' in zit

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Alientrader
  • Registratie: Oktober 2000
  • Laatst online: 01-12-2023

Alientrader

Dit was mijn compu!!

Topicstarter
Ik zit te hannesen,

Ik heb een database waarin ik alle verwijzingen van 's-Gravenhage moet vervangen naar Den Haag.


de SQL Query zou dit moeten zijn: Echter ik weet niet hoe ik de dubbele ' afvang in de query..


UPDATE tabelnaam SET Plaats = REPLACE(Plaats, 'Foute Stadnaam', 'Goede Stadnaam')


het is echt iets kleins en ik ben helaas geen mysql guru

Slotenmaker in Rotterdam | Slotenmaker in heel Nederland | Slotenmaker in Den Haag

Alle reacties


Acties:
  • +2 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

een \ er voor zetten, of dubbele quotes (") gebruiken aangezien mysql dat gewoon snapt.

[ Voor 61% gewijzigd door CyBeR op 04-07-2018 16:14 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 10:03
Alientrader schreef op woensdag 4 juli 2018 @ 16:12:
UPDATE tabelnaam SET Plaats = REPLACE(Plaats, 'Foute Stadnaam', 'Goede Stadnaam')
Dan zou ik het alsnog niet zo doen, want je vangt mogelijke side-effects niet af.
SQL:
1
UPDATE tabelnaam SET plaats = 'Den Haag' WHERE plaats = '''s-Gravenhage';


Het zou nog mooier zijn om een stam tabel te maken met alle plaatsnamen en vanuit tabelnaam aan de stamtabel te relateren. Dan hoef je maar in één tabel op één rij de plaatsnaam te veranderen.

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • Stoelpoot
  • Registratie: September 2012
  • Niet online
CurlyMo schreef op woensdag 4 juli 2018 @ 16:19:
[...]

Dan zou ik het alsnog niet zo doen, want je vangt mogelijke side-effects niet af.
SQL:
1
UPDATE tabelnaam SET plaats = 'Den Haag' WHERE plaats = '''s-Gravenhage';


Het zou nog mooier zijn om een stam tabel te maken met alle plaatsnamen en vanuit tabelnaam aan de stamtabel te relateren. Dan hoef je maar in één tabel op één rij de plaatsnaam te veranderen.
Mooier op normalisatieniveau misschien, maar de koppeling maakt queries ook trager. Als het gebruik van de database nooit de plaatsnaam als sortering of criteria gebruikt, maar wel vaak ophaalt als platte tekst, is dat onhandig.

Acties:
  • 0 Henk 'm!

  • Alientrader
  • Registratie: Oktober 2000
  • Laatst online: 01-12-2023

Alientrader

Dit was mijn compu!!

Topicstarter
CyBeR schreef op woensdag 4 juli 2018 @ 16:14:
een \ er voor zetten, of dubbele quotes (") gebruiken aangezien mysql dat gewoon snapt.
Bedankt de \ werkt idd.

Slotenmaker in Rotterdam | Slotenmaker in heel Nederland | Slotenmaker in Den Haag


Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 04-05 21:49

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Stoelpoot schreef op woensdag 4 juli 2018 @ 16:23:
Mooier op normalisatieniveau misschien, maar de koppeling maakt queries ook trager.
Afbeeldingslocatie: https://tweakers.net/ext/f/N8cuKLIyQQY8EUAJ5fp9P0gc/full.jpg

Behalve in erg specifieke cases is die behoorlijk generieke uitspraak die je doet complete 🐂💩 In een doorsnee scenario is dat 'trager' volledig verwaarloosbaar en gaat het voordeel dat je hebt van een fatsoenlijk genormaliseerd model vele malen boven de zo-goed-als-verwaarloosbare effecten van een FK relatie.

[ Voor 21% gewijzigd door RobIII op 04-07-2018 16:38 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • +1 Henk 'm!

  • Stoelpoot
  • Registratie: September 2012
  • Niet online
RobIII schreef op woensdag 4 juli 2018 @ 16:34:
[...]

[afbeelding]

Behalve in erg specifieke cases is die behoorlijk generieke uitspraak die je doet complete 🐂💩
Omdat de informatie die er is ook generiek is. Vandaar ook dat ik het verduidelijk met de casus waarin dit van toepassing is.

De database kan grote performance-eisen hebben, op tragere embedded hardware gebruikt worden, of kan wereldwijd gebruikt worden (flinke index). Bovendien is het niet nodig om een complexe referentie op te zetten als het enige wat nodig is een invulveldje op een profielensite is. Alleen in dit geval krijg je er echt last mee, en dan nog hoefde er maar een escape sequence voor.

Zoals ik zei is het qua normalisatie wel mooier. En een nanoseconde trager is ook trager, enkel verwaarloosbaar. Maar het is wel belangrijk om te weten dat het niet altijd zomaar "Ja maak er gewoon een stamtabel van" hoeft te zijn.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Stoelpoot schreef op woensdag 4 juli 2018 @ 16:23:
[...]
Mooier op normalisatieniveau misschien, maar de koppeling maakt queries ook trager. Als het gebruik van de database nooit de plaatsnaam als sortering of criteria gebruikt, maar wel vaak ophaalt als platte tekst, is dat onhandig.
Juist vanwege performance redenen wil je dit soort dingen gewoon wegnormaliseren. Dan praat je niet over nanosecondes, maar rustig over millisecondes tot secondes die je gaat opschieten met een behoorlijke normalisatie.

Je hebt extreem simplistisch gezegd 2 grote kampen in de dbms wereld, sql (/rdbms) en nosql.
En mysql is gewoon een rdbms, als je gaat opzoeken waar die r voor staat dan kan je ook begrijpen waar hun prioriteiten naar uitgaan. En dat is niet naar 10.000x hetzelfde varchar veldje maar van schijf halen.

En ook met embedded systems etc, daar is het efficiënter om 1x een varchar in het geheugen te hebben en daarnaast 2 integers dan 2x een varchar die gelijk is.

Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 10:03
Houdt er rekening mee dat de backslash niet in alle databases werkt zoals postgresql. Een aanvullende enkele quote als escape wel.

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 04-05 18:51

Dido

heforshe

Stoelpoot schreef op woensdag 4 juli 2018 @ 16:23:
Mooier op normalisatieniveau misschien, maar de koppeling maakt queries ook trager. Als het gebruik van de database nooit de plaatsnaam als sortering of criteria gebruikt, maar wel vaak ophaalt als platte tekst, is dat onhandig.
"Premature optimization", is een leuke term om eens te googlen.
Direct naar de 5e NV springen omdat er misschien wel performance edge-cases zouden kunnen zijn gaat erg ver.
In een rdbms normaliseer je gewoon alles uit, en je laat de database doen waar ie goed in is, namelijk het optimaliseren van queries op relationele databases.
Pas als je tegen een van die relatief zeldzame use-cases aanloopt waar je toch tegen performanceproblemen aan lijkt te lopen ga je misschien zelf eens aan performance-optimalisatie denken.

Reken voor de lol eens uit hoeveel milliseconden de TS nu extra kwijt is aan het maken can deze query, terwijl hij in een (beter) genormaliseerd datamodel 1 enkele update had kunnen doen, en dan nog gewoon op PK ook.

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • Renzmeister
  • Registratie: Januari 2011
  • Laatst online: 09:45
Hoe ver je normaliseert is natuurlijk ook compleet afhankelijk van je use case. Bouw je een transactioneel systeem, dan normaliseer je je data inderdaad helemaal uit. Bouw je een datamart, wat in MySQL prima mogelijk is, dan ligt een dimensioneel sterschema meer voor de hand en kan het best zo zijn dat de plaatsnaam meerdere keren voorkomt in een dimensietabel. Moet je veel aggregeren op bijv. time series data, dan stop je het misschien in 1 platgeslagen tabel, maar dan is MySQL misschien wat minder geschikt.

Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 04-05 21:49

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Renzmeister schreef op vrijdag 6 juli 2018 @ 09:33:
Hoe ver je normaliseert is natuurlijk ook compleet afhankelijk van je use case [...] blabla
We snappen dat je helemaal de bomshizzle bouwt in MySQL (of eender welk RDBMS) maar hoe is dat hier in vredesnaam relevant 8)7 Laten we 't gewoon lekker ontopic houden. Het ging, for pete's sake, over 't escapen van een ' en dat een where clause wel handig zou zijn om niet de hele tabel te raken. Iemand laat zijdelings (terecht) vallen dat het hele probleem niet aan de orde zou zijn maar 1 record zou betreffen als het model goed genormaliseerd was. Als het hier om een 'datamart' ging hadden we dit topic nooit gezien, dus laten we 't nou niet in 't extreme doortrekken.

[ Voor 3% gewijzigd door RobIII op 06-07-2018 10:19 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 10:03
@Alientrader Misschien een goed idee om even het antwoord van @CyBeR als beste antwoord aan te merken.

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • Renzmeister
  • Registratie: Januari 2011
  • Laatst online: 09:45
RobIII schreef op vrijdag 6 juli 2018 @ 10:18:
[...]

We snappen dat je helemaal de bomshizzle bouwt in MySQL (of eender welk RDBMS) maar hoe is dat hier in vredesnaam relevant 8)7 Laten we 't gewoon lekker ontopic houden. Het ging, for pete's sake, over 't escapen van een ' en dat een where clause wel handig zou zijn om niet de hele tabel te raken. Iemand laat zijdelings (terecht) vallen dat het hele probleem niet aan de orde zou zijn maar 1 record zou betreffen als het model goed genormaliseerd was. Als het hier om een 'datamart' ging hadden we dit topic nooit gezien, dus laten we 't nou niet in 't extreme doortrekken.
Ik had het dan iets anders moeten formuleren: Ik ben het niet eens met de suggestie om verder te normaliseren, zonder dat je weet wat @Alientrader aan het bouwen is. Nou ook niet doen alsof ik de discussie tot in het extreme doortrek, zo exotisch waren mijn voorbeelden niet...Offtopic is het wel, maar dat was de discussie allang, dus ik laat het hier maar bij.
Pagina: 1