Autor | Zpráva | ||
---|---|---|---|
freesofter Profil * |
#1 · Zasláno: 1. 6. 2005, 09:49:02
je probelm vytvorit vyhladavanie v DB pomocou select, no ale tak, ze najdete aj take vylsedky, ktore sa lisia iba dikaritikou, pripadne velkymi pismenami
napr. ked vyhladam "šašo", tak najde aj saso, sašo, SASO, ŠaŠO... dakujem! |
||
Pachollini Profil |
#2 · Zasláno: 1. 6. 2005, 12:26:35 · Upravil/a: Pachollini
Pokud Ti nevadí, že budou dotazy pomalé, dá se to vyřešit pomocí regulárních výrazů:
function vymen_pismena($vcem,$diakritika) { $pismeny=Array( "áÁaA", "čČcC", "ďĎdD", "éÉeEěĚ", "ěĚ", "íÍiI", "ňŇnN", "óÓoO", "řŘrR", "šŠsS", "ťŤtT", "úÚ", "ůŮuUúÚ", "ýÝyY", "žŽzZ"); $vysledek=""; if ($diakritika) $delka=6; else $delka=2; for ($i=0;$i<strlen($vcem);$i++) { $letter=substr($vcem,$i,1); for ($j=0;$j<count($pismeny);$j++) { if (strpos(substr($pismeny[$j],0,$delka),$letter)!==false) { $letter="[".substr($pismeny[$j],0,$delka)."]"; break; } } $vysledek.=$letter; } return($vysledek); } $vysledek=mysql_query("SELECT * FROM tabulka WHERE pole RLIKE '".vymen_pismena($hledane_slovo)."' "); Ale je to spíš hrůza než ztělesněná elegance. |
||
freesofter Profil * |
#3 · Zasláno: 1. 6. 2005, 12:45:41
a co mam zadat ako $vcem,$diakritika? dik
|
||
freesofter Profil * |
#4 · Zasláno: 1. 6. 2005, 12:46:32
neexistuje nejaka funckia, ktora vyhodi z textu z diakritikou text bez diakritiky? s tymi velkymi a malymi pismenami by to az tak nevadilo...
|
||
freesofter Profil * |
#5 · Zasláno: 1. 6. 2005, 13:36:07
nieco som nasiel ale najak tomu nechapem, mozte mi pomoct?
<?php function Odcesti($slovo,$nazevsloupce) { $exp = explode(" ", strtolower($slovo)); $query = implode("%", $exp); $query=StrTr($query, "\xC1\xC8\xCF\xC9\xCC\xCD\xBC\xD2\xD3\xD4\xD8\x8A". "\x8D\xDA\xD9\xDD\x8E\xE1\xE8\xEF\xE9\xEC\xED". "\xBE\xF2\xF4\xF3\xF8\x9A\x9D\xFA\xF9\xFD\x9E", "acdeeilnoorstuuyzacdeeilnoorstuuyz"); return " LOWER( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE($nazevsloupce, '\xC1','a'),'\xC8','c'),'\xCF','d'),'\xC9','e'),'\xCC','e'), '\xCD','i'),'\xBC','l'),'\xD2','n'),'\xD3','o'),'\xD4','o'), '\xD8','r'),'\x8A','s'),'\x8D','t'),'\xDA','u'),'\xD9','u'), '\xDD','y'),'\x8E','z'),'\xE1','a'),'\xE8','c'),'\xEF','d'), '\xE9','e'),'\xEC','e'),'\xED','i'),'\xBE','l'),'\xF2','n'), '\xF4','o'),'\xF3','o'),'\xF8','r'),'\x9A','s'),'\x9D','t'), '\xFA','u'),'\xF9','u'),'\xFD','y'),'\x9E','z')) like '%$query%'"; } ?> |
||
juneau Profil |
#6 · Zasláno: 1. 6. 2005, 14:27:21
lepsi fce je asi toto:
$str = "žžžžž"; $str2 = StrTr($str, "áäčďéěëíňóöřšťúůüýžÁÄČĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽ", "aacdeeeinoorstuuuyzAACDEEEINOORSTUUUYZ"); a vysledkem je $str2 = "zzzzz"; |
||
printf Profil |
#7 · Zasláno: 1. 6. 2005, 15:43:44
a kdyby byl problém s rychlostí, tak se jako krajní řešení může text, ve kterém se hledá, uložit do databáze dvakrát, jednou s diakritikou, podruhé bez.
|
||
Pachollini Profil |
#8 · Zasláno: 1. 6. 2005, 16:38:27
aha, sorry:
$vcem - text, který se má upravit pro dB dotaz $diakritika - má se odstranit diakritika? tedy dotaz by správně vypadal takhle: $vysledek=mysql_query("SELECT * FROM tabulka WHERE pole RLIKE '".vymen_pismena($hledane_slovo,true)."' "); |
||
freesofter Profil * |
#9 · Zasláno: 2. 6. 2005, 13:35:42
2printf: to je celkom dobre riesenie ale bojim sa o tu rychlost. Navstevnost webu je napr. teraz oˇ14 hodine okolo 1000, predpoklada sa rast, a tak neviem ci to bude az take good...co poviete?
|
||
printf Profil |
#10 · Zasláno: 2. 6. 2005, 15:44:20
uložení textu bez diakritiky do samostatného sloupce v databázi sice velmi zvětší její velikost ale zase se pak nemusí vypisovat všechny řádky a každý oddiakritikovat a potom prohledávat zvlášť. Některé databáze mají příkazy pro fultextové vyhledávání, pokud jde jen o jedno slovo, dá se použít ...WHERE text LIKE '%slovo%'...
|
||
Časová prodleva: 6 měsíců
|
|||
Phalairo Profil * |
#11 · Zasláno: 24. 11. 2005, 15:33:32
Pachollini:
Sikovny skript! Jen bych mel pripominku: Uprava "u" a "e" nefunguje uplne tak jak by mela..vezme to jen prvni 4 znaky z pole.. |
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0