21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
Vítězslav Mergl
Profil
Zdravím,
Potřeboval bych poradit ohledně funkce pro MySql.
Problém: nepodařilo se mi přepisovat více jak jeden znak.
funkce v PHP:
    function url_name($string){
        $not_keys = array('ě','š','č','ř','ž','ý','á','í','é',' ','ů','ú','ť','.');
        $val_keys = array('e','s','c','r','z','y','a','i','e','_','u','u','t','');
        $string = str_replace($not_keys,$val_keys,$string);
        return $string;
    }

To, co jsem zatím dokázal udělat:
CREATE FUNCTION url_name (s CHAR(60))
set @url = REPLACE(s,'č','c');
RETURNS CHAR(60) RETURN s;

Předem děkuji za odpovědi.
Kajman_
Profil *
Nepůjde to alespoň postupně?
CREATE FUNCTION url_name (s CHAR(60))
set @url = s;
set @url = REPLACE(@url,'ě','e');
set @url = REPLACE(@url,'š','s');
set @url = REPLACE(@url,'č','c');
...
RETURNS CHAR(60) RETURN @url;
fuckin
Profil
Ano postupně to jde. Lze bezproblému použít něco takového
set @url = REPLACE(REPLACE(REPLACE(REPLACE(clanek, 'č', 'c'), 'ř', 'r'), 'š', 's'), 'ž', 'z');
Vítězslav Mergl
Profil
Problem jsem již vyřešil. Bohužel ani jedno z těchto řešení není funkční.
řešení spočívá v nastavenem kodovaní mysql.
jestliže kodovaní se rovná utf8_czech_ci, tak č = c, Č=c, c=C atd...
jinak ale děkuji za snahu :)
Důvod nefunkčnosti vašich řešení:
set @p1 = REPLACE(p2,'č','c');
při tomto zapisu se se vysledek neuklada do promene p1 ale do proměné p2
Funkce replace ma return true,false, nikoli upravenou hodnotu.
K řešení od kajmana: Syntaxe tveho zapisu je šapná a pri alikaci vyhodi chybu. Ačkoli logicky je priklad řešený správně, nepodařilo se mi najít funkkční syntaxy.
Kajman_
Profil *
Funkce replace ma return true,false, nikoli upravenou hodnotu.
Jakou máte verzi mysql? Mně tohle funguje (s tím, že to vrátí vždy malá písmena).

CREATE FUNCTION `url_name`(s varchar(60)) RETURNS varchar(60) CHARSET utf8
begin
declare retstr varchar(60);
set retstr=lower(ifnull(s,''));
set retstr=replace(retstr,'ě','e');
set retstr=replace(retstr,'š','s');
set retstr=replace(retstr,'č','c');
return retstr;
end


A to původní taky jde, jen jsem použil Vaši spatnou syntaxy, o které jste tvrdil, že funguje :-)
CREATE FUNCTION url_name2 (s CHAR(60)) RETURNS CHAR(60)
begin
set @url = s;
set @url = REPLACE(@url,'ě','e');
set @url = REPLACE(@url,'š','s');
set @url = REPLACE(@url,'č','c');
RETURN @url;
end
Vítězslav Mergl
Profil
mnohokrát děkuji, toto řešení je pravděpodoně správné. Nicméně zjištění poznatku ohledne kodovani v utf8_czech_ci mi naprosto vyhovuje. Určitě ale zhodnotím tuto radu při dalších podobných problémech.

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:

0