Hledani podle vice klicovych slov
Petr Vileta
petr na practisoft.cz
Sobota Červen 21 18:41:58 CEST 2003
> Chci co nejefektivneji realizovat nasledujici:
> 1. najit zaznamy podle zadanych klicovych slov ve vztahu 'or'
> 2. najit zaznamy podle zadanych klicovych slov ve vztahu 'and'
> 3. zjistit vsechna pouzita klicova slova (kvuli checkboxum)
[...]
> Jak by tuto situaci resili zdejsi databazovi guruove? Diky za odpovedi.
Nejsem databazovy guru a moje reseni mozna spousta lidi zavrhne, ale ja to
resim takto:
Tabulka bude obsahovat pole "klicova_slova" a tato slova tam budou ulozena
tak, ze budou oddelena nejakym oddelovacem, ale ten musi byt i na samem
zacatku i konci, asi takhle:
",prvni,druhy,treti vyraz,dalsi,jeste nejaky,"
Misto carky je mozne pouzit cokoliv, co se bezne nevyskytne v klicovych
slovech.
Pak v aplikaci (v Perlu) nejprve sestavim do promenne jakousi podminku ze
slov, ktera hodlam vyhledat a podle toho, zda hledam zpusobem AND nebo OR.
No a pak uz dam jednoduchy select, kam tu podminku proste vlozim.
Dejme tomu, ze hledam "prvni OR druhy" a oddelovac je carka, pak bude
program vypadat asi takto:
$podminka="klicova_slova like \'%,prvni,%\' or klicova_slova like
\'%,druhy,%\'";
$sth=$dbh->prepare("SELECT * FROM tabulka WHERE $podminka");
$sth->execute();
while($row=$sth->fetchrow_arrayref)
{
print $row->[0], $row->[1] .... ;
}
$sth->finish;
Je to omezene pouze maximalni moznou delkou select prikazu a ta je myslim
dostatecne velka. V manualu jsem sice o tom nic nenasel, ale ani muj
nejdelsi dotaz, ktery mel 16kB nebyl prilis dlouhy ;-)
--
Petr
Další informace o konferenci Databases