Autor Zpráva
peta
Profil
Potreboval bych nejlepe v SQL prepsat u 400 clanku v phpRS
url 'http://xxx/img' ve sloupci `text`
na 'xxx/yyy/img'
nebo 'http://xxx/yyy/img'

Premistoval jsem CMPS phpRS do podadresare a oni tam pouzili uplnou adresu.
Muzu to samozrejme prepsat pres PHP script SELECT -> ereg_replace() -> UPDATE , ale rad bych znal i reseni v SQL, muze se hodit.
Kajman_
Profil *
zkuste si select a jestli to bude ok, tak ten update
replace(`text`,'http://xxx/img','http://xxx/yyy/img')
peta
Profil
s tim selectem to vypada takto a funguje:

<html>
<head><!--windows-1250-->
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8">
<meta http-equiv="CONTENT-LANGUAGE" content="cs">
</head>
<body>

<?php
@ini_set('error_reporting', E_ALL);
@ini_set("display_errors", "on");
error_reporting(E_ALL); //chyby = on

/*
'windows-1250' =>'cp1250',
'iso-8859-2' =>'latin2',
'utf-8' =>'utf8'
*/

mysql_connect('localhost','root','');
mysql_select_db('photo_3');
mysql_query('SET NAMES utf8');

//uprav text
$q = mysql_query("SELECT * FROM `rs2_clanky`") or die(mysql_error());
$n = mysql_num_rows($q);
echo $n."Text sloupec<hr>";
//$n = 50;
$i = 0;
for ($i=0;$i<$n;$i++)
{
$r = mysql_fetch_array($q); //mysql_fetch_row
// print_r($r);
$a = $r['text'];
$a = str_replace('http://neco.com/obr/','obr/',$a);
$a = str_replace('http://www.neco.com/obr/','obr/',$a);
if (strlen($a)!=strlen($r['text']))
{
$a = addslashes($a);
echo $r['idc'].', ';
// echo $a.'<hr>';
$q2 = mysql_query("UPDATE `rs2_clanky` SET `text`='".$a."' WHERE `idc`='".$r['idc']."'") or die(mysql_error());
}
}


v manualu na update, prekvapive zrovna zde je ukecanej,
http://dev.mysql.com/doc/refman/5.0/en/update.html ,
jsem nasel:
UPDATE xoops_bb_posts_text
SET post_text=(
REPLACE (post_text,
'morphix.sourceforge.net',
'www.morphix.org'));
coz podle mne nahrazuje cely obsah sloupce, ne? Podobne tvemu, jen i s tim update.
Kazdopadne to zkusim, dik. Muze se to hodit.

Jj, dopadlo to presne, jak jsem myslel.
`text`=='a' nahrad 'b'
jestlize `text` pouze obsahuje 'a', tak nic.
Nedalo by se to treba s MySQL reg vyrazem? Nebo to je jen pro cteni?
Kajman_
Profil *
V php také děláte jen dvakrát replace, tak to samé můžete i v mysql, když je zanoříte.
peta
Profil
Kajman_
s tim to nesouvisi. REPLACE v SQL provadi replace pro cely text, zrejme, protoze mi to nic neudelalo. A ja to potrebuji pro vsechny odkazy v tom textu.
cili REPLACE(x,a,b) nahradi pokud x=='a' za x='b'
ale uz nenahradi, kdyz x=='%a%' (obsahuje 'a' a nejaky jine text) za x='%b%'

mozna jsem to napsal spatne...
UPDATE `rs2_clanky` SET `text`=(REPLACE(`text`,'http://www.neco.com/obr/','obr/'));
cili aby mi prevedl vsechny absolutni url adresy v textu clanku na relativni, pripadne jinou absolutni. Protoze jsem cely system presunul pod pekny adresar phprs/ a udelal poradek ve zdrojacich. Ted by to mela byt v podstate cista instalace phprs2.8 a ne zbytky z 2.2 nebo predchoziho systemu.

Kazdopadne v tom PHP to mam vyresene, funguje. Jen mne zajimalo, zda by se to dalo resit elegantneji nez pres SELECT. Pak tam musim pridat to addslashes, protoze je to nejak divne ulozene uz z SQL3.x, ze ktereho jsem to presouval do SQL5. Taky porod. Smazal jsem 380MB spamu s databaze a pak precisloval pocet komentaru.
djlj
Profil
REPLACE v SQL provadi replace pro cely text
Ne, k tomu je určeno UPDATE.

protoze mi to nic neudelalo
Takděláš něco špatně.

mozna jsem to napsal spatne
Ano.

UPDATE `rs2_clanky` SET `text`=REPLACE(`text`,'http://www.neco.com/obr/','obr/')
peta
Profil
djlj
upravil jsem priklad z manualu, viz prispevek vys.
Jestlize je neco v manualu, apk predpokladam, ze je to snad ok.
Tez predpokladam, ze zavorka navic nehraje roli. Se podivam, jestli mam jeste testovaci databazi, ale si myslim, ze by to melo dat stejny vysledek.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: