Autor Zpráva
stepanka
Profil *
Ahoj,

prosím, nepomohl by mi někdo s jedním dotazem?

Vyhledávám zadaný řetězec v databázi. Před selectem ho ještě upravím, tzn. například v proměnné $fulltext mám teď po zadání slova "img" řetězec "+img ". A pak mám takovýto SELECT:

$query = $db->query("SELECT SQL_CALC_FOUND_ROWS 'stranka',
s.nazev, s.obsah_bez_html, s.id_stranka
FROM stranky s
WHERE s.aktivni='a' 
and (s.publikovat_od is null or s.publikovat_od='' or s.publikovat_od<=now()) 
and s.jazyk='".$_SESSION['page_lang']."' 
AND MATCH (nazev, obsah_bez_html, obsah) AGAINST ('$fulltext' IN BOOLEAN MODE)
");


Když smažu zvýrazněný řádek, najde mi to několik výsledků. Když tam ten řádek je, tak ani jeden.

Přitom ve sloupci "obsah" je třeba "...<img hspace="10" height=..." a více podobných, tzn., že řetězec by se měl vyhledat i s tím zvýrazněným řádkem.

Už to zkouším něco přes hodinu, tak se obracím sem..

Děkuju moc.
radas
Profil *
zkuste tam vložit před ten dotaz

mysql_query("ALTER TABLE stranky s ADD FULLTEXT hledani (nazev, obsah_bez_html, obsah)");
jinak dobrý článek byl na intervalu a p. Vrana ma taky dobry...
stepanka
Profil *
radas

Děkuju za reakci. Když tam doplním ten příkaz před můj příkaz SELECT, tak mi to vypíše

Chyba QUERY: 1064 ALTER TABLE stranky s ADD FULLTEXT hledani (nazev, obsah_bez_html, obsah)You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's ADD FULLTEXT hledani (nazev, obsah_bez_html, obsah)' at line 1

Kód je takhle:

$db->query("ALTER TABLE stranky s ADD FULLTEXT hledani (nazev, obsah_bez_html, obsah)"); 
$query = $db->query("SELECT SQL_CALC_FOUND_ROWS 'stranka',
s.nazev, s.obsah_bez_html, s.id_stranka
FROM .... zbytek stejný


článek od Vrány jsem našla, ale nepomohl mi. Zkusím najít ještě ten na intervalu..
radas
Profil *
je dobrý ten název te tabulky?
stepanka
Profil *
radas

Jo, ten je správně.. A co to slovo hledani v tom Tvém kousku? Pak už ho nikde nepoužívám.. to nevadí?
stepanka
Profil *
Ten článek na intervalu je fakt dobrý, díky za doporučení. Píšou tam:

MySQL používa jednoduchý parser na "vyťahovanie" slov z textov. Tu si treba uvedomiť, čo považuje MySQL za slovo. Podľa parsera MySQL je slovo skupina znakov pozostávajúcich z písmen, číslic, ' (znak apostrofu) a _ (podtrhnutie). Každému slovu prideľuje určitú "váhu". Čím je váha nižšia, tým viac sa dané slovo v stĺpci vyskytuje. Slová s nulovou váhou sú pri vyhľadávaní ignorované. Slová, ktoré majú tri a menej znakov (náš uvedený príklad hore a príklad s emailovou adresou), majú nulovú váhu.

Ty mnou vyhledávané slova jsou moc krátké. Když zadám vyhledávat "a", taky mi to vyplivne nula výsledků.

Nevíte někdo, jak se to dá obejít? :-) To už tam nikde nepíšou.... Chtěla bych vidět všechny výskyty, a nejen to, co si nejdřív přetřídí MySQL..
TomášK
Profil
V alter table nemá smysl aliasovat, to je ta syntaktická chyba. tohle by mělo projít:
ALTER TABLE stranky ADD FULLTEXT idx_hledani (nazev, obsah_bez_html, obsah)


Délka slova, od které indexovat, je v proměnné ft_max_word_len a dá se nastavit v konfiguračním souboru.
stepanka
Profil *
TomášK

Máš pravdu, už to tu chybu nehází. Můžu se, prosím, zeptat, k čemu ten řádek slouží? Ať tam je, nebo není, na výsledek to nemá žádný vliv (teda zatím jsem si žádného nevšimla).

Jinak mockrát děkuju za info o proměnné a konf. souboru. Díky moc.
TomášK
Profil
Abych pravdu řekl, k čemu slouží přesně nevím, jen jsem viděl, že syntaxe je špatná. Fulltext jsem zatím nikdy nepotřeboval. Mám zato, že pokud chci vyhledávat ve fulltextu, musím nad těmi daty vytvořit fulltextový index, což by ten příkaz měl dělat (aspoň tak vypadá). S ním už by snad nějakým selectem mohlo jít něco najít, ale jak ten select má vypadat a proč ten výše uvedený nefunguje, netuším.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0