Majme tabuľku a v nej stĺpec meno, v ktorom je hodnoa: Patrik Čermák
pri vyhľadávaní príkazom
SELECT * FROM tabulka WHERE (meno LIKE "%cermak%")
sa horeuvedený záznam nenájde.
Je to zrejme kvoli diakritike. Ako to mám vyriešiť, aby horeuvedený záznam našlo? Možno treba zmeniť znakovú sadu na mysql serveri, ale ako?
Ja bych se priklonil k tomu, udelat to vyhledavani obecne, pomoci regularniho vyrazu. Predpokladam, ze ten hledany retezec zadava nekdo pres formular. Tak by bylo pekny, kdyby mohl zadat "cermak", "čermák", "Cermák" nebo "Čermák" a porad by to bylo schopny najit toho cloveka.
Kdesi jsem videl nasledujici zpusob: vezmes hledany retezec a kazde pismeno v nem nahradis predem danym retezcem (kouskem regularniho vyrazu), konkretne by to vypadalo nejak tak, ze bys "č" nahradil "[cčCČ]", "á" bys nahradil "[aáAÁ]", napriklad "É" by se nahradilo "[eéěeÉĚ]", atd. takze i obycejne "c" by se nahradilo "[cčCČ]", coz ti zaruci to, ze clovek tu diakritiku zadat muze a nemusi a vzdycky by mu to melo najit to, co hleda (maximalne neco navic).
V konecnem dusledku by se hledany retezec "cermak" nahradil retezcem "[cčCČ][eéěEÉĚ][rR][mM][aáAÁ][kK]" a hledalo by se to jako regularni vyraz, takze neco jako
SELECT * FROM tabulka WHERE meno RLIKE "[cčCČ][eéěEÉĚ][rR][mM][aáAÁ][kK]";
... nebo tak nejak podobne
Akorat se musi dat trochu prace s vymyslenim te predvodni tabulky, aby se pokryly vsechny moznosti ceskeho jazyka, jinak by tento princip fungovat mel.
Super, díky, funguje to.
Ja som si už spravil aj tú prevodnú tabuľku:
<?php
function regular($str)
{
$str = ereg_replace("[aáä]","[aáä]",$str);
$str = ereg_replace("[cč]","[cč]",$str);
$str = ereg_replace("[dď]","[dď]",$str);
$str = ereg_replace("[eéěë]","[eéěë]",$str);
$str = ereg_replace("[ií]","[ií]",$str);
$str = ereg_replace("[lĺľ]","[lĺľ]",$str);
$str = ereg_replace("[nň]","[nň]",$str);
$str = ereg_replace("[oóöô]","[oóöô]",$str);
$str = ereg_replace("[rŕř]","[rŕř]",$str);
$str = ereg_replace("[tť]","[tť]",$str);
$str = ereg_replace("[uúůü]","[uúůü]",$str);
$str = ereg_replace("[yý]","[yý]",$str);
$str = ereg_replace("[zž]","[zž]",$str);
$str = ereg_replace("[AÁÄ]","[AÁÄ]",$str);
$str = ereg_replace("[CČ]","[CČ]",$str);
$str = ereg_replace("[DĎ]","[DĎ]",$str);
$str = ereg_replace("[EÉĚË]","[EÉĚË]",$str);
$str = ereg_replace("[IÍ]","[IÍ]",$str);
$str = ereg_replace("[LĹĽ]","[LĹĽ]",$str);
$str = ereg_replace("[NŇ]","[NŇ]",$str);
$str = ereg_replace("[OÓÖÔ]","[OÓÖÔ]",$str);
$str = ereg_replace("[RŔŘ]","[RŔŘ]",$str);
$str = ereg_replace("[TŤ]","[TŤ]",$str);
$str = ereg_replace("[UÚŮÜ]","[UÚŮÜ]",$str);
$str = ereg_replace("[YÝ]","[YÝ]",$str);
$str = ereg_replace("[ZŽ]","[ZŽ]",$str);
return $str;
}
$ret = "patrik cermak";
echo "Reťazec s diakritikou: <B>$ret</B><BR>";
echo "Regulárny výraz pre mysql: <B>".regular($ret);
?>