Autor Zpráva
ph@tE
Profil *
Mám vyhledávač a potřeboval bych do něj dát funkci, která vyhledává pouze slovo, která souhlasí v celém slově, tzn. aby to např. slovo domov nevyhledalo na slovo dom, ale pouze na domov. Nevim jak na to, asi nějakým regulárním výrazem.
Zatím to mám takto:

$vysledek = mysql_query("SELECT * FROM clanky WHERE (Nazev like '%$slovo%') OR (Popis like '%$slovo%') $orderby LIMIT $od,$do");

Co s tím?
Anonymní
Profil *
nemas kopirovat scripty tak ako pride ale zistit co robia.
vies co ti robi '%$slovo%' ?
ph@tE
Profil *
Jo vim, vyhledá to proměnnou slovo z tabulky clanky ze sloupců Nazev a Popis, kterou uživatel zadá do pole na text a před touto proměnnou může být cokoliv a za ní taky. Tzn. že když uživatel zadá blo, tak mu to najde i stránky, kde je slovo blog. Já bych právě potřeboval, aby to vyhledávalo pouze slovo blo, a ne blog, prostě aby se to shodovalo v celém slově a nevim jak na to...
sonik
Profil
odpověděl si sám: před touto proměnnou může být cokoliv a za ní taky
takže dej pryč %
Anonymní
Profil *
No jo, ale pak to bude vyhledávat tak, že polkud bude třeba popis = slovo, tak ho to vyhledá a ne pokud mám třeba popis: "Toto je můj blog", tak ho to nevyhledá, sice tam slovo blog obsaženo je, ale nerovná se popisu, nebo to je jinak?? Zkusim to, ale myslim že to nepude...
Kajman_
Profil *
A co zkusit fulltext v mysql?
Anonymní
Profil *
Jak jako fulltext?? To neznám.
Kajman_
Profil *
http://dev.mysql.com/doc/refman/4.1/en/fulltext-search.html
Joker
Profil
S jistým omezením by fungovalo:
WHERE Nazev LIKE ' %slovo% '.
Pak to nenajde věci, kde je hledaný výraz jen částí slova. Problém je, že to nenajde ani třeba: "slovo." "slovo:" "slovo!" "slovo?" a podobně, což je asi chyba.
sonik
Profil
FULLTEXT cca nějak takto jsem to...
$searchtext="\"".$_POST["searchtext"]."\""; \\aby to hledalo přesně co chceš

nad čím chceš hledat:
$indexes='nadpis,autor,text';

musíš vytvořit fulltextový index:
mysql_query("ALTER TABLE ".$databases." ADD FULLTEXT search (".$indexes.")");

pak se zeptáš:
$query="SELECT *,MATCH(".$indexes.") AGAINST('".$searchtext."' IN BOOLEAN MODE) as score FROM ".$databases." WHERE MATCH(".$indexes.") AGAINST('".$searchtext."' IN BOOLEAN MODE) and zobrazit='y' ";

setřídíš podle kvality (~množství nalezených shod):
$query.=" ORDER BY score DESC";


bacha na češtinu a hledat se dá myslím slova větší než 3 znaky

$vysledek=mysql_query($query);

....

nakonci zrušit index:

mysql_query("ALTER TABLE ".$databases." DROP INDEX search")
sonik
Profil
pokud chceš hledat výskyt ahoj a zároveň čau, musí se přidat operátor + před každé slovo
Toto téma je uzamčeno. Odpověď nelze zaslat.

0