Vyhľadávanie v databáze
7 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
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?
-
Myslím, že diakritikou to nebude, zkus ještě: SELECT * FROM tabulka WHERE (meno LIKE "%Cermak%")
-
Ne tak sorry, teď jsem to zkoušel a myslím, že ani můj předešlej HELP Ti nepomůže. Bude to zřejmě určitě diakritikou a ne velikostí písmen.
-
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.
-
Tak to je dost dobrý, mě by to asi nenapadlo, já bych asi ty lidi přinutil, aby to zadávali i s diakritikou...
-
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); ?>
-
Ještě ti tam chybí: $str = ereg_replace("[sš]","[sš]",$str); $str = ereg_replace("[SŠ]","[SŠ]",$str);