2010-12-23 24 views

Antwort

3

Update:

update MyTable 
set MyColumn = concat('[videolog]', replace(SUBSTRING(SUBSTRING_INDEX(MyColumn, '/', -1), 2), '.flv', '[/videolog]')) 
where MyColumn like 'http://play.videolog.tv/videos/%' 
+0

@virendar: Ich habe zu schnell gelesen und nicht realisiert, dass die * xx * -Werte Zahlen waren. Siehe meine aktualisierte Version oben. – RedFilter

+0

hallo sorry für die späte antwort, danke dafür! es ist fast perfekt .... statt [videolog] 398682 [/ videolog] habe ich [videolog] 98682 [/ videolog] (die 3 fehlt?) – GreatestSwordsman

+0

ah auch, es funktioniert nicht, wenn die Leitung in der in der Mitte des anderen Textes oder, wenn ein anderer Text dahinter steht, in meinem Post-Inhalt – GreatestSwordsman

0

es einige String Magie geschieht dies völlig in MySQL zu tun. Ich glaube, das sollte funktionieren:

UPDATE posts_table 
SET posts_table.post_text = REPLACE(posts_table.post_text, @full_url := MID(posts_table.post_text, @url_start := LOCATE('http://play.videolog.tv/videos/', posts_table.post_text), LOCATE('.flv', posts_table.post_text, @url_start) + 4 - @url_start), 
CONCAT('[videolog]', MID(@full_url, LENGTH(@full_url) - LOCATE('/', REVERSE(@full_url)) + 2, 6), '[/videolog]')) 
WHERE LOCATE('http://play.videolog.tv/videos/', posts_table.post_text) 

Sie es mit dieser Abfrage testen:

SELECT REPLACE(posts_table.post_text, @full_url := MID(posts_table.post_text, @url_start := LOCATE('http://play.videolog.tv/videos/', posts_table.post_text), LOCATE('.flv', posts_table.post_text, @url_start) + 4 - @url_start), 
CONCAT('[videolog]', MID(@full_url, LENGTH(@full_url) - LOCATE('/', REVERSE(@full_url)) + 2, 6), '[/videolog]')) AS `result` 
FROM posts_table 
WHERE LOCATE('http://play.videolog.tv/videos/', posts_table.post_text) 

Ersetzen Sie einfach posts_table und post_text mit den richtigen Tisch/Spaltennamen.

Diese Abfrage sollte alle Instanzen dieser URL ersetzen, auch wenn sie sich in der Mitte eines Texts befindet.