Autor Zpráva
freesofter
Profil *
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
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 *
a co mam zadat ako $vcem,$diakritika? dik
freesofter
Profil *
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 *
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
lepsi fce je asi toto:

$str = "žžžžž";

$str2 = StrTr($str, "áäčďéěëíňóöřšťúůüýžÁÄČĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽ", "aacdeeeinoorstuuuyzAACDEEEINOORSTUUUYZ");

a vysledkem je $str2 = "zzzzz";
printf
Profil
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
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 *
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
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%'...
Phalairo
Profil *
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..
Toto téma je uzamčeno. Odpověď nelze zaslat.

0