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