PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : REPLACE mit mysql



Andislack
13-12-2002, 11:03
hi!

ich vor mir eine ersatzteil-db mit ca. 12000 einträgen.
eine tabelle heisst ARTIKEL und besitzt unteranderem die spalte BILDPATH
allse bilder die darin angegeben sind, sind als .bmp angegeben.
ich wollte jetzt gerne .bmp durch den REPLACE befehl in .jpg umwandeln lassen, komme aber irgendwie nichz hin.

weiss jemand, wie der genaue befehl lautet?

diese versuche brachten kein glück:

SELECT REPLACE ('.BILDPATH','.bmp','.jpg') FROM ARTIKEL

die syntax lautet ja: REPLACE (string, from_string,to_string), aber irgendwie bekomme ich das nicht so richtig angewendet...

danke schonmal gruss andi

jwebworks
13-12-2002, 11:49
willst du nur beim ausgeben der werte die endung
ändern oder die daten in der datenbank?

du übergibst der funktion doch '.BILDPATH' als string
da kann man kein .bmp oder .jpg austauschen.

cu, stop.h

Gaert
13-12-2002, 12:52
Beispiel:

SELECT REPLACE(a.bildpath,'.bmp','.jpg') as new_bildpath
FROM artikel as a

Andislack
13-12-2002, 14:52
hi!

also ich möchte die daten in der datenbank ändern!

wenn ich den befehl von gaert ausführe, dann funktioniert es schon, dass alle endungen von .bmp nach .jpg geändert werden. direkt nach dem ausführen wird mir nur die spalte new_bildpath angegeben und darin ist auch alles geändert wie ich es will, doch wenn ich mir jetzt die gesamte tabelle ARTIKEL wieder ansehe, steht in BILDPATH wieder alles mit .bmp drin!?

wie lautet dann der befehl um die daten in der db zu ändern und nicht nur die geänderten ausgeben?

danke gruss andi

Gaert
13-12-2002, 16:45
Alles klar!
Bin davon ausgegangen, daß du einen Select machen willst, weil du das in deinem ersten Beispiel angegeben hast

Also... der Befehl den du suchst sieht dann so aus!

Mach aber vorher ein Backup, nicht dass dir die Daten in die Grütze gehen!


UPDATE artikel SET bildpath=REPLACE(bildpath,'.bmp','.jpg');

Andislack
14-12-2002, 09:47
hi und vielen dank!

hat alles bestens funktioniert...

das mit dem select davor ist mir dann irgendwann auch selber ein/aufgefallen, dass er da nix in der db ändert...
ich tue mache gerade learning by doing und da sind manchmal ein paar sachen recht unklar :D

wie gut dass es euch hier gibt!

danke

gruss andi

Andislack
15-12-2002, 11:26
wie schnell ist doch ein prob gelöst....doch treten immer wieder neue auf :confused:

also das mit der endung ändern hat ja jetzt wunderbar geklappt...
jetzt stimmt die pfadangabe aber noch nicht. hab ich mir gedacht machst es wie mit der endung...gesagt getan, doch so funktioniert es irgendwie nicht:

die pfadangabe ist zurzeit bei jedem bild in der db: \\Gdiline\\bilder\\ (und jetzt kommt das bild 12233.jpg mit der bereits geänderten endung)

ich möchte aber nun das der pfad in /Bilder/gdi/ geändert wird!

hab folgendes gemacht:



UPDATE ARTIKEL SET CCKBILDPATH=REPLACE(CCKBILDPATH,' \\Gdiline\\ ','/Bilder/gdi/');


ich merke gerade, dass die doppel \\ auch im php-code nciht angezeigt werden...
also \\Gdiline\\bilder\\ heisst es normal...(gibts bestimmt ne ganz einfache lösung oder?)

er bringt auch keine fehlermeldung, doch er sagt auch, dass 0 datensätze betroffen sind?? der pfad ist aber definitiv richitg angegeben.

hat das was mit den Slashes zu tun? werden die jetzt vielleciht als kommentar angesehen oder so? hab sie schon in "" gesetzt, aber gleiches ergebnis...

danke und gruss andi

Gaert
15-12-2002, 11:33
Lass mal die leerzeichen vor und nach \Gdiline\ weg!

Bevor ich n update mache, bei dem ich nicht weiss was bei rauskommt würde ich immer ein select machen (schema dafür siehste ja in meinem ersten post), damit du siehst welche Datensätze wie betroffen sind.

Andislack
15-12-2002, 11:35
hi!

die sind nur durch den php-code entstanden.

so sieht der normale befehl aus:

UPDATE ARTIKEL SET CCKBILDPATH=REPLACE(CCKBILDPATH,'\\Gdiline\\bilder \\','/Bilder/gdi/');

gruss andi

Andislack
15-12-2002, 14:16
hi!

diese fehlermeldung kommt, wenn ich mal einen slash bei dem alten pfad weglasse:

Es scheint einen Fehler in Ihrer MySQL-Abfrage zu geben. Die MySQL-Fehlerausgabe, falls vorhanden, kann Ihnen auch bei der Fehleranalyse helfen.

ERROR: Nicht geschlossene Anführungszeichen @ 83
STR: '
SQL: UPDATE ARTIKEL SET CCKBILDPATH=REPLACE(CCKBILDPATH,'\Gdiline\bilder\' ,'/Bilder/gdi/');

Fehler

SQL-Befehl :

UPDATE ARTIKEL SET CCKBILDPATH=REPLACE(CCKBILDPATH,'\Gdiline\bilder\' ,'/Bilder/gdi/');

MySQL meldet:


You have an error in your SQL syntax near '')' at line 1

aber da ist doch jedes anführungszeichen geschlossen!? was will der noch?

danke gruss andi

Gaert
15-12-2002, 14:40
Frage... mit was führst du den Befehl aus (welches Programm)?

Bei ... ,'\Gdiline\bilder\' ... escaped das letzte \ das darauffolgende Anführungszeichen => Der String ist nicht geschlossen!
Du musst also auf jeden Fall die \ mit einem \ escapen...
... ,'\\Gdiline\\bilder\\' ... wäre alson schon korrekt!

Andislack
15-12-2002, 15:06
mit phpmyadmin mache ich das alles

also der alte pfad heisst ja \\Gdiline\\bilder\\ und soll zu /Bilder/gdi/ werden

das würde dann bedeuten, dass ich sowas wie :

UPDATE ARTIKEL SET CCKBILDPATH=REPLACE(CCKBILDPATH,'\\\Gdiline\\\bild er\\\','//Bilder//gdi//');

MySQL meldet:

You have an error in your SQL syntax near '/Bilder//gdi//')' at line 1


aber dann kommt wieder eine andere fehlermeldung...

ich habe die slashes schon überall gesetzt und verdoppelt und verdreifacht, aber es will einfach noch nicht ganz

andi

Andislack
15-12-2002, 17:38
hi!

es funktioniert jetzt!

ich brauchte ja \\ und um einen \ im sql befehl zu schreiben muss man ja schon zwei schreiben, also sind insgesamt \\\\ nötig.

hier nochmal der gesamte befehl der zum erfolg geführt hat:

UPDATE ARTIKEL SET CCKBILDPATH=REPLACE(CCKBILDPATH,'\\\\Gdiline\\\\bi lder\\\\','/Bilder/gdi/');


so funktionierts ;-)

vielen dank gruss andi