RE: mySQL - prohledavani databaze

From: Peter Marko (marko@limba.sk)
Date: 14. 02. 2002, 16:01 CET


> Chtel bych hledat ve 3 polich (treba id, popis, keywords) a v PHP mam
> promenou jako pole ($hledat[n]), ktera muze mit ruzny pocet
> hodnot. Jak
> postavit dotaz, aby se porovnavala kazda hodnota s kazdym z
> tech tri poli?
>
> Napada me akorat v PHP pomoci for projit tu $hledat[n] a pro
> kazdou hodnotu
> udelat tri podminky oddelene OR. Pripada mi to ale priserne
> slozity, urcite
> existuje neco jednoduzsiho...
>
> Pak by to vypadalo asi takhle:
>
> SELECT * FROM takulka
>     WHERE (id LIKE \"%" . $hledat[0] . "%\")
>        OR (popis LIKE \"%" . $hledat[0] . "%\")
>        OR (keywords LIKE \"%" . $hledat[0] . "%\")
>        OR (id LIKE \"%" . $hledat[1] . "%\")
>        OR (popis LIKE \"%" . $hledat[1] . "%\")
>        OR ........
>
> No a nakonec bych jeste rad seradil vasledek podle
> nejcastejsiho vyskytu...
>
> Diky za kazde nakopnuti, zejmena pak spravnym smerem... ;)
>
> PS: RTFM delam, ale je mi to prd platny :(
>

skusal si fulltext?
neviem ci je to presne to o co mas zaujem, ale tu je mensi navod

alter table tabulka add fulltext fulltextindexname (columnname)

vytvor si bud index na kazdy stlpec alebo na vsetky tri naraz (id, popis,
keywords) alebo to skombinuj, treba si to vyskusat ake vysledky ti to vracia
a co je pre teba najlepsie

no a potom spravis select

select ktore, stlpce, potrebujes, match (id, popis, keywords) against
('.$searchstring.') as skore
where match (id, popis, keywords) against ('.$searchstring.')

$searchstring si vytvor zlozenim vsetkych dat v tom tvojom poli $hledat,
mozes si to vsak zopakovat sizeof($hledat) krat po jednom slove

vo vratenych datach budes mat v stlpci skore s akou pocetnostou a
podobnostou nasiel hladany string v tychto indexovanych stlpcoch, toto skore
je ale vypocitavane mne dost zahadnym sposobom, priklad: na dotaz "velka
raca" mi vrati s vacsim skore "raca" ako "velka raca" a neviem preco, ale to
je uz moj problem
pozri si manual mysql, tam je o fulltexte toho popisaneho dost - aj
detailnejsie o tom co je vypustene z vysledku hladania za urcitych podmienok
(htt
p://
www.
mysq
l.com/documentation/mysql/bychapter/manual_Reference.html#Fulltext_Search)
ja pouzivam system temporarnej tabulky a do nej ukladam medzivysledky
vyhladavania jednotlivych slov - samozrejme bez vkladania duplicitnych
zaznamov

peter



This archive was generated by hypermail 2.1.2 : 14. 02. 2002, 16:00 CET